国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

jquery1.83 之前所有與異步列隊相關的模塊詳細介紹

2024-05-06 14:20:55
字體:
來源:轉載
供稿:網友
jQuery在1.5引入了Deferred對象(異步列隊),當時它還沒有劃分為一個模塊,放到核心模塊中。直到1.52才分割出來。它擁有三個方法:_Deferred, Deferred與when。

出于變量在不同作用域的共用,jQuery實現異步列隊時不使用面向對象方式,它把_Deferred當作一個工廠方法,返回一個不透明的函數列隊。之所以說不透明,是因為它的狀態與元素都以閉包手段保護起來,只能通過列隊對象提供的方法進行操作。這幾個方法分別是done(添加函數),resolveWith(指定作用域地執行所有函數),resolve(執行所有函數),isResolved(判定是否已經調用過resolveWith或resolve方法),cancel(中斷執行操作)。但_Deferred自始至終都作為一個內部方法,從沒有在文檔中公開過。

Deferred在1.5是兩個_Deferred的合體,但1+1不等于2,它還是做了增強。偷偷爆料,Deferred本來是python世界大名鼎鼎的Twisted框架的東西,由早期七大JS類庫中的MochiKit取經回來,最后被dojo繼承衣缽。jQuery之所以這樣構造Deferred,分明不愿背抄襲的惡名,于是方法改得一塌糊涂,是jQuery命名最差的API,完全不知所云。它還加入當時正在熱烈討論的promise機制。下面是一個比較列表:
dojojQuery注解
addBoththen同時添加正常回調與錯誤回調
addCallbackdone添加正?;卣{
addErrbackfail添加錯誤回調
callbackdone執行所有正?;卣{
errbackreject執行所有錯誤回調
doneWith在指定作用域下執行所有正常回調,但dojo已經在addCallback上指定好了
rejectWith在指定作用域下執行所有錯誤回調,但dojo已經在addErrback上指定好了
promise返回一個外界不能改變其狀態的Deferred對象(外稱為Promise對象)

jQuery的when方法用于實現回調的回調,或者說,幾個異列列隊都執行后才執行另外的一些回調。這些后來的回調也是用done, when, fail添加的,但when返回的這個對象已經添加讓用戶控制它執行的能力了。因為這時它是種叫Promise的東西,只負責添加回調與讓用戶窺探其狀態。一旦前一段回調都觸發了,它就自然進入正常回調列隊(deferred ,見Deferred方法的定義)或錯誤回調列隊(failDeferred )中去。不過我這樣講,對于沒有異步編程經驗的人來說,肯定聽得云里霧里。看實例好了。
代碼如下:
$.when({aa:1}, {aa:2}).done(function(a,b){
console.log(a.aa)
console.log(b.aa)
});

直接輸出1,2。如果是傳入兩個函數,也是返回兩個函數。因此對于普通的數據類型,前面的when有多少個參數,后面的done, fail方法的回調就有多少個參數。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 龙陵县| 江山市| 高雄市| 双桥区| 白玉县| 贡觉县| 白玉县| 黄骅市| 阿鲁科尔沁旗| 简阳市| 阜南县| 辉县市| 武穴市| 南丹县| 措美县| 星座| 衡阳市| 洛川县| 家居| 游戏| 东明县| 栖霞市| 菏泽市| 阿荣旗| 香港| 巴彦县| 尚义县| 清河县| 邢台县| 京山县| 武冈市| 蒙自县| 朔州市| 佛坪县| 潍坊市| 长沙市| 瓮安县| 邛崃市| 屯门区| 贡山| 贡山|