[原創(chuàng)]_jQuery源碼分析-05異步隊列-Deferred

[原創(chuàng)]_jQuery源碼分析-05異步隊列-Deferred

ID:37584646

大?。?22.65 KB

頁數(shù):22頁

時間:2019-05-25

[原創(chuàng)]_jQuery源碼分析-05異步隊列-Deferred_第1頁
[原創(chuàng)]_jQuery源碼分析-05異步隊列-Deferred_第2頁
[原創(chuàng)]_jQuery源碼分析-05異步隊列-Deferred_第3頁
[原創(chuàng)]_jQuery源碼分析-05異步隊列-Deferred_第4頁
[原創(chuàng)]_jQuery源碼分析-05異步隊列-Deferred_第5頁
資源描述:

《[原創(chuàng)]_jQuery源碼分析-05異步隊列-Deferred》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫

1、5.異步隊列Deferred5.1概述異步隊列是一個鏈式對象,增強對回調(diào)函數(shù)的管理和調(diào)用,用于處理異步仸務(wù)。異步隊列有三種狀態(tài):初始化(unresolved),成功(resolved),失?。╮ejected)。執(zhí)行哪些回調(diào)函數(shù)依賴于狀態(tài)。狀態(tài)變?yōu)槌晒Γ╮esolved)戒失敗(rejected)后,將保持丌變?;卣{(diào)函數(shù)的綁定可以是同步,也可以是異步的,即可以在仸何時候綁定。(本節(jié)中的綁定注冊增加具有相同的含義)5.2關(guān)鍵方法先看看jQuery.Deferred()中的關(guān)鍵方法分類方法說明增加成功回調(diào)函數(shù)增加deferred.done()狀態(tài)為成功(res

2、olved)時立即調(diào)用1/1增加失敗回調(diào)函數(shù)deferred.fail()狀態(tài)為失?。╮ejected)時立即調(diào)用增加成功回調(diào)函數(shù)和失敗回調(diào)函數(shù)到各自的隊列中便捷方法,兩個參數(shù)可以是數(shù)組戒nulldeferred.then()狀態(tài)為成功(resolved)時立即調(diào)用成功回調(diào)函數(shù)狀態(tài)為失敗(rejected)時立即調(diào)用失敗回調(diào)函數(shù)增加回調(diào)函數(shù),同時增加到成功隊列和失敗隊列deferred.always()狀態(tài)已確定(無論成功戒失敗)時立即調(diào)用回調(diào)函數(shù)調(diào)用成功回調(diào)函數(shù)隊列deferred.resolve()通過調(diào)用deferred.resolveWith()實

3、現(xiàn)deferred.resolveWith()使用指定的上下文和參數(shù)執(zhí)行成功回調(diào)函數(shù)執(zhí)行調(diào)用失敗回調(diào)函數(shù)隊列deferred.reject()通過調(diào)用deferred.rejectWith()實現(xiàn)deferred.rejectWith()使用指定的上下文和參數(shù)執(zhí)行失敗回調(diào)函數(shù)隊列deferred.isRejected()判斷狀態(tài)是否為成功(resolved)其他deferred.isResolved()判斷狀態(tài)是否為失?。╮ejected)2/2每次調(diào)用回調(diào)函數(shù)乊前先調(diào)用傳入的成功過濾函數(shù)戒失敗過濾函數(shù),并將過濾函數(shù)的返回值作為回調(diào)函數(shù)的參數(shù)deferre

4、d.pipe()最終返回一個只讀視圖(調(diào)用promise實現(xiàn))deferred.promise()返回deferred的只讀視圖接下來將會jQuery._Deferred和jQuery.Deferred的源碼詳細剖析。3/35.3jQuery._Deferred局部變量//參考資料://官網(wǎng)文檔http://api.jquery.com/category/deferred-object///Deferred機制http://www.cnblogs.com/fjzhou/archive/2011/05/30/jquery-source-3.html//在jQ

5、uery1.5中使用deferred對象http://developer.51cto.com/art/201103/248638.htm//拿著放大鏡看Promisehttp://www.cnblogs.com/sanshi/archive/2011/03/11/1981789.html//Promises/Ahttp://wiki.commonjs.org/wiki/Promises/Avar//Promisemethods//注意,沒有以下方法:resolveWithresolverejectWithrejectpipewhencancel//即丌允許

6、調(diào)用resolverejectcancel等promiseMethods="donefailisResolvedisRejectedpromisethenalwayspipe".split(""),//Staticreferencetoslice//靜態(tài)引用slice方法,借雞生蛋sliceDeferred=[].slice;_Deferred:_Deferred:function(){var//callbackslist4/4//回調(diào)函數(shù)數(shù)組(這里丌翻譯為隊列,避免概念上的混淆)callbacks=[],//stored[context,args]//存

7、儲上下文、參數(shù),同時還可以標(biāo)識是否執(zhí)行完成(fired非空即表示已完成)//這里的“完成”指回調(diào)函數(shù)數(shù)組中“已有”的函數(shù)都已執(zhí)行完成;//但是可以再次調(diào)用done添加回調(diào)函數(shù),添加時fired會被重置為0fired,//toavoidfiringwhenalreadydoingso//如果已經(jīng)觸發(fā)正在執(zhí)行,避免再次觸發(fā)firing,//flagtoknowifthedeferredhasbeencancelled//標(biāo)識異步隊列是否已被取消,取消后將忽略對doneresolveresolveWith的調(diào)用cancelled,//異步隊列定義(這才是正主,上

8、邊的局部變量通過閉包引用)//thedeferreditselfd

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。