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

JavaScript 異步調(diào)用框架 (Part 5 - 鏈?zhǔn)綄崿F(xiàn))

 更新時間:2009年08月04日 00:11:43   作者:  
在上一篇文章里面,我們?yōu)楫惒秸{(diào)用框架設(shè)計了一種鏈?zhǔn)秸{(diào)用方式,來增強(qiáng)異步調(diào)用隊列的代碼可讀性,現(xiàn)在我們就來編寫實現(xiàn)這部分功能的代碼。
調(diào)用入口
鏈?zhǔn)秸{(diào)用存在Async.go方法和Async.chain方法兩個入口,這兩個入口本質(zhì)上是一致的,只是Async.chain方法在調(diào)用時先不提供初始參數(shù),而Async.go方法在調(diào)用時提供了初始參數(shù)并啟動異步調(diào)用鏈。
復(fù)制代碼 代碼如下:

Async.chain = function() {
var chain = new Async.Operation({ chain: true });
return chain;
};
Async.go = function(initialArgument) {
return Async.chain().go(initialArgument);
}

在這里我們可以看到,鏈?zhǔn)秸{(diào)用本身也是一個Async.Operation,鏈?zhǔn)秸{(diào)用所需的go方法和next方法都是在Async.Operation上面做的擴(kuò)展,并且這個擴(kuò)展不會很難,這將在下一小節(jié)說明。
擴(kuò)展方法
我們都知道,通過addCallback方法添加的回調(diào)函數(shù)是會被逐一執(zhí)行的,至少同步函數(shù)如此,因此我們可以用Async.Operation的這一特性來維護(hù)異步調(diào)用隊列,前提是我們?yōu)樗由蠈Ξ惒秸{(diào)用進(jìn)行隊列的支持。
對于異步調(diào)用進(jìn)行隊列的支持,我們稍后再來處理,首先我們利用現(xiàn)成的addCallback方法和yield方法擴(kuò)展出go方法和next方法。
復(fù)制代碼 代碼如下:

this.go = function(initialArgument) {
return this.yield(initialArgument);
}
this.next = function(nextFunction) {
return this.addCallback(nextFunction);
};

實際上,go方法和next方法直接調(diào)用的正是yield方法和addCallback方法。go方法的語義與yield方法一樣,傳遞一個參數(shù)給Async.Operation實例,并且啟動調(diào)用隊列。同時,next方法的語義和addCallback方法,添加一個調(diào)用到隊列的末端。
異步隊列
如何才能讓原本僅支持同步的隊列變得也支持異步?這需要檢測隊列中的每一個調(diào)用的返回,如果返回類型為Async.Operation,我們知道是異步調(diào)用,從而使用特殊的方法等它執(zhí)行完后再執(zhí)行下去。
復(fù)制代碼 代碼如下:

callbackResult = callback(self.result);
self.result = callbackResult;
if (callbackResult && callbackResult instanceof Async.Operation) {
innerChain = Async.chain();
while (callbackQueue.length > 0) {
innerChain.next(callbackQueue.shift());
}
innerChain.next(function(result) {
self.result = result;
self.state = "completed";
self.completed = true;
return result;
});
callbackResult.addCallback(function(result) {
self.result = result;
innerChain.go(result);
});
}

如果調(diào)用返回了一個Async.Operation實例,我們就利用它自身的addCallback方法幫我們執(zhí)行隊列中余下的調(diào)用。準(zhǔn)確來說,是我們構(gòu)造了一個新的調(diào)用鏈,把隊列余下的調(diào)用都轉(zhuǎn)移到新的調(diào)用鏈上,然后讓當(dāng)前異步調(diào)用在回調(diào)中啟動這個新的調(diào)用鏈。
此外還有一些地方我們需要略作修改,以兼容新的異步調(diào)用隊列的。例如result、state、completed的狀態(tài)變更,在鏈?zhǔn)秸{(diào)用中是有所不同的。
小結(jié)
我們在原有的Async.Operation上略作修改,使得它支持異步調(diào)用隊列,完整的代碼看這里:支持鏈?zhǔn)秸{(diào)用的異步調(diào)用框架Async.Operation。
現(xiàn)在我們已經(jīng)擁有了一個功能強(qiáng)大的Async.Operation,接下來我們就要看看如何將它投入到更多常見的使用模式中去

相關(guān)文章

  • layui 對彈窗 form表單賦值的實現(xiàn)方法

    layui 對彈窗 form表單賦值的實現(xiàn)方法

    今天小編就為大家分享一篇layui 對彈窗 form表單賦值的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • 教大家輕松制作Bootstrap漂亮表格(table)

    教大家輕松制作Bootstrap漂亮表格(table)

    這篇文章主要為大家詳細(xì)介紹了Bootstrap輕松制作漂亮表格table的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • filters.revealTrans.Transition使用方法小結(jié)

    filters.revealTrans.Transition使用方法小結(jié)

    有看到幻燈片調(diào)用會用到divid.filters.revealTrans.Transition=Math.floor(Math.random()*23)和divid.filters.revealTrans.apply(),那么這兩個都是什么意思呢?
    2010-08-08
  • 禁止拷貝網(wǎng)頁內(nèi)容的js代碼

    禁止拷貝網(wǎng)頁內(nèi)容的js代碼

    如何禁止拷貝網(wǎng)頁內(nèi)容,想維護(hù)下自己的版權(quán),下面有個不錯的方法,大家可以學(xué)習(xí)下
    2014-01-01
  • 微信小程序事件 bindtap bindinput代碼實例

    微信小程序事件 bindtap bindinput代碼實例

    這篇文章主要介紹了微信小程序事件 bindtap bindinput代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • JavaScript對象學(xué)習(xí)小結(jié)

    JavaScript對象學(xué)習(xí)小結(jié)

    JavaScript 中的所有事物都是對象:字符串、數(shù)值、數(shù)組、函數(shù).幾乎用到的每個js都離不開它的js對象。此外,JavaScript 允許自定義對象,下面跟著小編學(xué)習(xí)javascript對象學(xué)習(xí)小結(jié),需要的朋友可以參考下
    2015-09-09
  • JS實現(xiàn)多物體運動

    JS實現(xiàn)多物體運動

    這篇文章主要為大家詳細(xì)介紹了JS實現(xiàn)多物體運動,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 該如何加載google-analytics(或其他第三方)的JS

    該如何加載google-analytics(或其他第三方)的JS

    很多網(wǎng)站為了獲取用戶訪問網(wǎng)站的統(tǒng)計信息,使用了google-analytics或其他分析網(wǎng)站(下面的討論中只提google-analytics,簡稱ga)。
    2010-05-05
  • 在JavaScript中實現(xiàn)命名空間

    在JavaScript中實現(xiàn)命名空間

    在JavaScript中實現(xiàn)命名空間...
    2006-11-11
  • 淺談頁面裝載js及性能分析方法

    淺談頁面裝載js及性能分析方法

    這篇文章主要簡單介紹了頁面裝載js及性能分析方法的相關(guān)資料,需要的朋友可以參考下
    2014-12-12

最新評論

梅河口市| 鹤壁市| 广南县| 时尚| 句容市| 宝丰县| 屏南县| 海安县| 三门峡市| 社旗县| 平湖市| 榆树市| 区。| 永川市| 永春县| 温宿县| 新宾| 咸宁市| 左云县| 新津县| 苍山县| 阿合奇县| 永兴县| 苗栗市| 孝昌县| 安阳市| 同德县| 项城市| 丹寨县| 承德市| 泰和县| 泸西县| 女性| 怀宁县| 南皮县| 邹城市| 环江| 龙州县| 师宗县| 镇原县| 忻州市|