摘要:基數,倒計時進入倒計時進入倒計時進入倒計時進入倒計時進入倒計時倒計數結束執行完畢,結果為,準備進入。
基于《JS-異步函數鏈式調用》使用起來不是很方便直觀,對此做一次優化,更符合使用的精簡版:
//源碼 function simpleChainedFn(){ var localParam = arguments; //當前入參 var firstFnArguments; //首節點的入參(數組格式) var chainLength = localParam.length; //除掉首節點入參,所有鏈條長度 // 入參數據校驗... for(i=0;i鏈條模板:
simpleChainedFn(函數1,函數2,....,函數n,[首節點入參1,首節點入參2,...首節點入參n]); 模板說明: 1、支持多個函數自動擴展; 2、如果最后一個參數是數組,則作為首節點調用時的入參; 3、首節點入參個數會隨著數組長度自動擴展;函數模板:
function 函數名(入參1,入參2,...,入參n){ var callback = getCallbackFn.call(arguments.callee); // TODO... if(callback && typeof callback === "function"){ callback(入參1,入參2,...,入參n); } } 模板說明: 1、"var callback = getCallbackFn.call(arguments.callee);"盡量在函數體前邊;實際運用
假設現在有3個需要同步執行的函數:fnA,fnB,fnC;
fnA的功能:將基數(入參1),乘上乘積(入參2),結果值和倒計時(入參3)傳給fnB;
fnB的功能:進入倒計時,倒計時結束后,將入參乘上5,然后傳給fnC;
fnC的功能:將參數打印出來;// 組合鏈式關系 ... simpleChainedFn(fnA,fnB,fnC,[2,10,5]); // 將基數(入參1),乘上乘積(入參2),結果值和倒計時(入參3)傳給fnB... function fnA(base,multiplier,cDown){ var callback = getCallbackFn.call(arguments.callee); console.log("【fnA】基數:" + base + ",乘積:" + multiplier + ",倒計時:" + cDown); var num = base * multiplier ; if(callback && typeof callback === "function"){ console.log("【fnA】執行完畢,結果為:" + num + ",準備進入fnB。"); callback(num,cDown); // 等價于fnB } } // 進入倒計時,倒計時結束后,將入參乘上5,然后傳給fnC... function fnB(base,cDown){ var callback = getCallbackFn.call(arguments.callee); console.log("【fnB】基數:" + base + ",倒計時:" + cDown); var countDown = cDown; var tTout = setInterval(function(){ console.log("【fnB】進入倒計時 -> " + --countDown + "s"); if(countDown <= 0){ console.log("【fnB】倒計數結束"); countDown = -1; clearTimeout(tTout); var num = base * 5; if(callback && typeof callback === "function"){ console.log("【fnB】執行完畢,結果為:" + num + ",準備進入fnC。"); callback(num);// 等價于fnC } } },1000); } // 將參數打印出來; function fnC(tArg){ var callback = getCallbackFn.call(arguments.callee); console.log("【fnC】計算結果為:" + tArg); if(callback && typeof callback === "function"){ callback(); } }執行結果:
【FnA】基數:2,乘積:10,倒計時:5 【FnA】執行完畢,結果為:20,準備進入fnB。 【fnB】基數:20,倒計時:5 【fnB】進入倒計時 -> 4s 【fnB】進入倒計時 -> 3s 【fnB】進入倒計時 -> 2s 【fnB】進入倒計時 -> 1s 【fnB】進入倒計時 -> 0s 【fnB】倒計數結束 【fnB】執行完畢,結果為:100,準備進入fnC。 【fnC】計算結果為:100
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/100227.html
摘要:基數,倒計時進入倒計時進入倒計時進入倒計時進入倒計時進入倒計時倒計數結束執行完畢,結果為,準備進入。 2018-12-21 更新1、簡化調用方式,更貼近普通函數的風格;精簡版戳這里! 2018-12-05 更新1、支持頭節點入參;2、簡化調用方式; //源碼 function chainedFn(chain,firstFnArguments){ // 入參數據校驗 ... ...
摘要:三模式模式其實包含兩部分和。六化在編碼的時候,想要用進行異步操作流程控制,就要將當前的異步回調函數封裝成。 一、什么是promise/deferred 模式 promise/deferred 模式是,根據promise/A 或者它的增強修改版promise/A+ 規范 實現的promise異步操作的一種實現方式。 異步的廣度使用使得回調,嵌套出現,但是一但出現深度的嵌套,就會讓codi...
摘要:是什么在規范中,是一個類,它的構造函數接受一個函數。在這種情況下,是但處于狀態。與一起使用關鍵字會暫停執行一個函數,直到等待的變成狀態。此外,會一直等待調用直到下一個時序。 原文:Write Your Own Node.js Promise Library from Scratch作者:code_barbarian Promise 已經是 JavaScript 中異步處理的基石,回調...
摘要:回調函數不是由該函數的實現方直接調用,而是在特定的事件或條件發生時由另外的一方調用的,用于對該事件或條件進行響應。若是使用回調函數進行處理,代碼就可以繼續進行其他任務,而無需空等。參考理解回調函數理解與使用中的回調函數這篇相當不錯回調函數 為什么寫回調函數 對于javascript中回調函數 一直處于理解,但是應用不好的階段,總是在別人家的代碼中看到很巧妙的回調,那時候會有wow c...
閱讀 1090·2021-11-15 18:00
閱讀 2803·2021-09-22 15:18
閱讀 1965·2021-09-04 16:45
閱讀 750·2019-08-30 15:55
閱讀 3853·2019-08-30 13:10
閱讀 1332·2019-08-30 11:06
閱讀 1984·2019-08-29 12:51
閱讀 2294·2019-08-26 13:55