最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

jQuery 源碼分析筆記(3) Deferred機制

 更新時間:2011年06月19日 23:58:52   作者:  
從1.5版本開始,jQuery加入了Deferred功能,讓事件處理隊列更加的完善。并用這個機制重寫了Ajax模塊。雖然還沒輪到Ajax,但是接下來的事件處理函數(shù)中牽扯到了這個機制,所以提前看這段代碼。
Deferred把回調函數(shù)注冊到一個隊列中,統(tǒng)一管理,并且可以同步或者異步地調用這些函數(shù)。
jQuery.Deferred()用來構造一個Deferred對象。該對象有狀態(tài)值,共有三種: Rejected, Resolved和初始狀態(tài)。其中Resolved表示該操作成功完成了,而Rejected 則表示出現(xiàn)了錯誤,調用失敗。Deferred對象的主要成員如下:
done(callback): 注冊一個callback函數(shù),當狀態(tài)為resolved時被調用。 * fail(callback): 注冊一個callback函數(shù),當狀態(tài)為rejected時被調用。 * always(callback): 注冊一個callback函數(shù),無論是resolved或者rejected都會被調用。 * then(successCallback, failureCallback): 同時傳入成功和失敗的回調函數(shù)。 * pipe(successFilter, failureFilter): 在調用成功和失敗的回調函數(shù)前先調用pipe 指定的函數(shù)。算是一種管道機制,攔截了函數(shù)調用。 * resolve(args): 把狀態(tài)設置為Resolved。 * reject(args): 把狀態(tài)設置為Rejected。 * promse(): 返回的是一個不完整的Deferred的接口,沒有resolve和reject。即不能修改Deferred對象的狀態(tài)??梢钥醋魇且环N只讀視圖。這是為了不讓外部函數(shù)提早觸發(fā)回調函數(shù)。比如$.ajax在1.5版本后不再返回XMLHttpRequest,而是返回一個封裝了 XMLHttpRequest和Deferred對象接口的object。其中Deferred部分就是promise()得到的,這樣不讓外部函數(shù)調用resolve和reject,防止在ajax完成前觸發(fā)回調函數(shù)。把這兩個函數(shù)的調用權限保留給ajax內部。
這個模塊的代碼從939行開始,緊接著jQuery對象的聲明。也算是一個基礎核心代碼了。同時也是1.5版本最大的變化之一。
實際上Resolve和Reject的代碼邏輯是一樣的,只是對應的狀態(tài)不同而已。為了代碼復用,內部先實現(xiàn)了一個Deferred,然后真正的Deferred內部new了兩個Deferred,一個作為 Resolve,另一個作為Reject。
_Deferred對象內部維護了一個函數(shù)數(shù)組(callback list)。Done(f1, f2...)的工作就是把這些callback依次push到這個隊列中保存下來。而resolveWith(帶參的resolve)和resolve依次調用這寫callback函數(shù)。
Done中,需要判斷事件是否已經(jīng)完成。如果callback加入chain時事件已經(jīng)完成,則需要馬上執(zhí)行callback。這個特性是讓callback不用再和觸發(fā)異步事件聲明寫在一起的原因。比如原來必須寫$.post("...", function(data) { ... })。這個success callback必須寫在這里,而現(xiàn)在可以寫:
復制代碼 代碼如下:

var defer = $.post("...");
// ...
defer.success(function(data) {
// ...
});
// ...
defer.fail(function(data) {
// ...
});

這樣異步事件的聲明和回調函數(shù)就可以分別管理了。這是1.5版本重寫后的最大變化。
pipe(successFilter, failureFilter)函數(shù)修改了原來對象中的callback list。在兩個callback list前面用then函數(shù)分別插入了Filter函數(shù)。然后返回。這樣當這個Deferred對象的狀態(tài)變化時,會先調用pipe函數(shù)指定的Filter函數(shù),然后才會調用callback list。
promise()則單純許多,就是new一個新object,然后把需要的成員copy進去。這個需要的成員定義在一個叫promiseMethods常量中。
復制代碼 代碼如下:

var promiseMethods = "done fail isResolved isRejected promise then always pipe".split(" ");

相關文章

  • jQuery實現(xiàn)灰藍風格標準二級下拉菜單效果代碼

    jQuery實現(xiàn)灰藍風格標準二級下拉菜單效果代碼

    這篇文章主要介紹了jQuery實現(xiàn)灰藍風格標準二級下拉菜單效果代碼,涉及jquery鼠標mouseover事件控制頁面元素樣式動態(tài)變換的實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • jquery的$().each和$.each的區(qū)別

    jquery的$().each和$.each的區(qū)別

    今天小編就為大家分享一篇關于jquery的$().each和$.each的區(qū)別,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 利用jquery.qrcode在頁面上生成二維碼且支持中文

    利用jquery.qrcode在頁面上生成二維碼且支持中文

    這篇文章主要介紹了利用jquery.qrcode在頁面上生成二維碼且支持中文。需要的朋友可以過來參考下,希望對大家有所幫助
    2014-02-02
  • 2013年優(yōu)秀jQuery插件整理小結

    2013年優(yōu)秀jQuery插件整理小結

    今天為大家推薦的是2013年的第一期,在這期里面十個jQuery插件涵蓋了響應式的網(wǎng)格布局插件、圖片放大插件、表單元素中自定義select插件,google 地圖插件、文件拖放上傳插件、tooltip提示插件、3D旋轉菜單等等
    2013-11-11
  • 33個優(yōu)秀的jQuery 教程分享(幻燈片、動畫菜單)

    33個優(yōu)秀的jQuery 教程分享(幻燈片、動畫菜單)

    jQuery 是一個非常優(yōu)秀的 JavaScript 框架,使用簡單靈活,在現(xiàn)在的Web開發(fā)項目中扮演著重要角色。這篇文章與大家分享33個優(yōu)秀的 jQuery 教程,教您如何使用 jQuery 制作幻燈片、動畫菜單、照片墻、圖片畫廊等很多效果很炫的功能。
    2011-07-07
  • jQuery中clone()方法用法實例

    jQuery中clone()方法用法實例

    這篇文章主要介紹了jQuery中clone()方法用法,實例分析了clone()方法的功能、定義及克隆匹配的DOM元素的使用技巧,需要的朋友可以參考下
    2015-01-01
  • jquery 簡單導航實現(xiàn)代碼

    jquery 簡單導航實現(xiàn)代碼

    jquery簡單導航實現(xiàn)代碼,需要的朋友可以參考下。
    2009-09-09
  • jQuery on()方法使用技巧詳解

    jQuery on()方法使用技巧詳解

    這篇文章主要介紹了jQuery on()方法使用技巧詳解,本文講解了trigger()綁定、多個事件綁定同一個函數(shù)、多個事件綁定不同函數(shù)、綁定自定義事件、傳遞數(shù)據(jù)到函數(shù)等技巧,需要的朋友可以參考下
    2015-04-04
  • JQuery中的常用事件、對象屬性與使用方法分析

    JQuery中的常用事件、對象屬性與使用方法分析

    這篇文章主要介紹了JQuery中的常用事件、對象屬性與使用方法,結合實例形式分析了jquery事件、對象屬性、方法相關使用技巧,需要的朋友可以參考下
    2019-12-12
  • 基于jquery的DIV隨滾動條滾動而滾動的代碼

    基于jquery的DIV隨滾動條滾動而滾動的代碼

    基于jquery的DIV隨滾動條滾動而滾動的代碼,有了JQuery簡單多了,就幾行代碼搞定
    2012-07-07

最新評論

阳原县| 洛宁县| 西充县| 南澳县| 军事| 石景山区| 南昌市| 平潭县| 珠海市| 义乌市| 如皋市| 乌拉特后旗| 兰考县| 五大连池市| 慈利县| 樟树市| 灌云县| 巴塘县| 长乐市| 天气| 龙海市| 绥化市| 遵义市| 紫云| 礼泉县| 宜兰市| 永康市| 凤山县| 夹江县| 玉屏| 德化县| 盐边县| 余庆县| 江安县| 子长县| 张家口市| 定陶县| 平罗县| 左贡县| 合川市| 汕尾市|