成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JS-異步函數(shù)鏈?zhǔn)秸{(diào)用2(精簡版,推薦)

Heier / 2496人閱讀

摘要:基數(shù),倒計(jì)時(shí)進(jìn)入倒計(jì)時(shí)進(jìn)入倒計(jì)時(shí)進(jìn)入倒計(jì)時(shí)進(jìn)入倒計(jì)時(shí)進(jìn)入倒計(jì)時(shí)倒計(jì)數(shù)結(jié)束執(zhí)行完畢,結(jié)果為,準(zhǔn)備進(jìn)入。

基于《JS-異步函數(shù)鏈?zhǔn)秸{(diào)用》使用起來不是很方便直觀,對此做一次優(yōu)化,更符合使用的精簡版:

//源碼
function simpleChainedFn(){
    var localParam = arguments; //當(dāng)前入?yún)?    var firstFnArguments; //首節(jié)點(diǎn)的入?yún)?數(shù)組格式)
    var chainLength = localParam.length; //除掉首節(jié)點(diǎn)入?yún)?,所有鏈條長度

    // 入?yún)?shù)據(jù)校驗(yàn)...
    for(i=0;i

鏈條模板:

simpleChainedFn(函數(shù)1,函數(shù)2,....,函數(shù)n,[首節(jié)點(diǎn)入?yún)?,首節(jié)點(diǎn)入?yún)?,...首節(jié)點(diǎn)入?yún)]);

模板說明:
    1、支持多個(gè)函數(shù)自動(dòng)擴(kuò)展;
    2、如果最后一個(gè)參數(shù)是數(shù)組,則作為首節(jié)點(diǎn)調(diào)用時(shí)的入?yún)ⅲ?    3、首節(jié)點(diǎn)入?yún)€(gè)數(shù)會隨著數(shù)組長度自動(dòng)擴(kuò)展;
    

函數(shù)模板:

function 函數(shù)名(入?yún)?,入?yún)?,...,入?yún)){
    var callback = getCallbackFn.call(arguments.callee);
    // TODO...
    

    if(callback && typeof callback === "function"){
        callback(入?yún)?,入?yún)?,...,入?yún));
    }

}

模板說明:
    1、"var callback = getCallbackFn.call(arguments.callee);"盡量在函數(shù)體前邊;    

實(shí)際運(yùn)用
假設(shè)現(xiàn)在有3個(gè)需要同步執(zhí)行的函數(shù):fnA,fnB,fnC;
fnA的功能:將基數(shù)(入?yún)?),乘上乘積(入?yún)?),結(jié)果值和倒計(jì)時(shí)(入?yún)?)傳給fnB;
fnB的功能:進(jìn)入倒計(jì)時(shí),倒計(jì)時(shí)結(jié)束后,將入?yún)⒊松?,然后傳給fnC;
fnC的功能:將參數(shù)打印出來;

// 組合鏈?zhǔn)疥P(guān)系 ...
simpleChainedFn(fnA,fnB,fnC,[2,10,5]);




// 將基數(shù)(入?yún)?),乘上乘積(入?yún)?),結(jié)果值和倒計(jì)時(shí)(入?yún)?)傳給fnB...
function fnA(base,multiplier,cDown){
    var callback = getCallbackFn.call(arguments.callee);

    console.log("【fnA】基數(shù):" + base + ",乘積:" + multiplier + ",倒計(jì)時(shí):" + cDown);
    var num = base * multiplier ;

    if(callback && typeof callback === "function"){
        console.log("【fnA】執(zhí)行完畢,結(jié)果為:" + num + ",準(zhǔn)備進(jìn)入fnB。");
        callback(num,cDown); // 等價(jià)于fnB
    }

}

// 進(jìn)入倒計(jì)時(shí),倒計(jì)時(shí)結(jié)束后,將入?yún)⒊松?,然后傳給fnC...
function fnB(base,cDown){
    var callback = getCallbackFn.call(arguments.callee);

    console.log("【fnB】基數(shù):" + base + ",倒計(jì)時(shí):" + cDown);
    var countDown = cDown;
    var tTout = setInterval(function(){
        console.log("【fnB】進(jìn)入倒計(jì)時(shí) -> " + --countDown + "s");
        if(countDown <= 0){
            console.log("【fnB】倒計(jì)數(shù)結(jié)束");
            countDown = -1;
            clearTimeout(tTout);

            var num = base * 5;

            if(callback && typeof callback === "function"){
                console.log("【fnB】執(zhí)行完畢,結(jié)果為:" + num + ",準(zhǔn)備進(jìn)入fnC。");
                callback(num);// 等價(jià)于fnC
            }
        }
    },1000);
}

// 將參數(shù)打印出來;
function fnC(tArg){
    var callback = getCallbackFn.call(arguments.callee);

    console.log("【fnC】計(jì)算結(jié)果為:" + tArg);
    if(callback && typeof callback === "function"){
        callback();
    }

}

執(zhí)行結(jié)果:

【FnA】基數(shù):2,乘積:10,倒計(jì)時(shí):5
【FnA】執(zhí)行完畢,結(jié)果為:20,準(zhǔn)備進(jìn)入fnB。
【fnB】基數(shù):20,倒計(jì)時(shí):5
【fnB】進(jìn)入倒計(jì)時(shí) -> 4s
【fnB】進(jìn)入倒計(jì)時(shí) -> 3s
【fnB】進(jìn)入倒計(jì)時(shí) -> 2s
【fnB】進(jìn)入倒計(jì)時(shí) -> 1s
【fnB】進(jìn)入倒計(jì)時(shí) -> 0s
【fnB】倒計(jì)數(shù)結(jié)束
【fnB】執(zhí)行完畢,結(jié)果為:100,準(zhǔn)備進(jìn)入fnC。
【fnC】計(jì)算結(jié)果為:100



文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/100227.html

相關(guān)文章

  • JS-異步函數(shù)鏈?zhǔn)?/em>調(diào)用(更新:20181221)

    摘要:基數(shù),倒計(jì)時(shí)進(jìn)入倒計(jì)時(shí)進(jìn)入倒計(jì)時(shí)進(jìn)入倒計(jì)時(shí)進(jìn)入倒計(jì)時(shí)進(jìn)入倒計(jì)時(shí)倒計(jì)數(shù)結(jié)束執(zhí)行完畢,結(jié)果為,準(zhǔn)備進(jìn)入。 2018-12-21 更新1、簡化調(diào)用方式,更貼近普通函數(shù)的風(fēng)格;精簡版戳這里! 2018-12-05 更新1、支持頭節(jié)點(diǎn)入?yún)ⅲ?、簡化調(diào)用方式; //源碼 function chainedFn(chain,firstFnArguments){ // 入?yún)?shù)據(jù)校驗(yàn) ... ...

    lidashuang 評論0 收藏0
  • promise/deferred 模式原理分析和實(shí)現(xiàn)

    摘要:三模式模式其實(shí)包含兩部分和。六化在編碼的時(shí)候,想要用進(jìn)行異步操作流程控制,就要將當(dāng)前的異步回調(diào)函數(shù)封裝成。 一、什么是promise/deferred 模式 promise/deferred 模式是,根據(jù)promise/A 或者它的增強(qiáng)修改版promise/A+ 規(guī)范 實(shí)現(xiàn)的promise異步操作的一種實(shí)現(xiàn)方式。 異步的廣度使用使得回調(diào),嵌套出現(xiàn),但是一但出現(xiàn)深度的嵌套,就會讓codi...

    gclove 評論0 收藏0
  • 從零開始寫一個(gè) Promise 庫

    摘要:是什么在規(guī)范中,是一個(gè)類,它的構(gòu)造函數(shù)接受一個(gè)函數(shù)。在這種情況下,是但處于狀態(tài)。與一起使用關(guān)鍵字會暫停執(zhí)行一個(gè)函數(shù),直到等待的變成狀態(tài)。此外,會一直等待調(diào)用直到下一個(gè)時(shí)序。 原文:Write Your Own Node.js Promise Library from Scratch作者:code_barbarian Promise 已經(jīng)是 JavaScript 中異步處理的基石,回調(diào)...

    Binguner 評論0 收藏0
  • javascript 回調(diào)函數(shù) 整理

    摘要:回調(diào)函數(shù)不是由該函數(shù)的實(shí)現(xiàn)方直接調(diào)用,而是在特定的事件或條件發(fā)生時(shí)由另外的一方調(diào)用的,用于對該事件或條件進(jìn)行響應(yīng)。若是使用回調(diào)函數(shù)進(jìn)行處理,代碼就可以繼續(xù)進(jìn)行其他任務(wù),而無需空等。參考理解回調(diào)函數(shù)理解與使用中的回調(diào)函數(shù)這篇相當(dāng)不錯(cuò)回調(diào)函數(shù) 為什么寫回調(diào)函數(shù) 對于javascript中回調(diào)函數(shù) 一直處于理解,但是應(yīng)用不好的階段,總是在別人家的代碼中看到很巧妙的回調(diào),那時(shí)候會有wow c...

    xiaowugui666 評論0 收藏0
  • Promise快餐

    摘要:實(shí)例具有方法方法是定義在原型對象上的它的作用是為實(shí)例添加狀態(tài)改變時(shí)的回調(diào)函數(shù)。一個(gè)請求的例子出錯(cuò)了方法是的別名,用于指定發(fā)生錯(cuò)誤時(shí)的回調(diào)函數(shù)。那個(gè)率先改變的實(shí)例的返回值,就傳遞給的回調(diào)函數(shù)。 Promise 是異步編程的一種解決方案,其他的異步編程解決方案還有——回調(diào)函數(shù)、事件監(jiān)聽、發(fā)布訂閱,以及ES6新增的Generator 。 http://www.ruanyifeng.com/b...

    leone 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<