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