描述
由於nodejs中的函數調用都是異步執行的,而筆者在工程開發中函數A需要四五個參數,而這四五個參數值都是通過函數調用獲得,因此按順序寫代碼時,執行到函數A時,往往函數A需要的參數值因為參數的異步調用關系,所需參數都還是undefined。
解決思路是保證函數A執行之前,函數A所需的四五個參數值都已經獲得,可以通過async來實現代碼的串行執行。
版本
nodejs: 6.9.5
async: 2.2.0
步驟
1、首先安裝async
npm install async --save
2、寫async串行化代碼
筆者函數A所需的參數a,b,c,d,e都是通過函數調用獲得,但是這五個函數調用都是獨立的,之間不會相互影響,因此可以選擇async中的 parrallel來實現,具體代碼如下:
let async = require('async'); async.parallel({ paraA:function(done){ let paraA = invokeA();//參數paraA通過invokeA獲得 done(null,paraA); }, paraB:function(done){ let paraB = invokeB(); done(null,paraB); }, paraC:function(done){ let paraC = invokeC(); done(null,paraC); }, paraD:function(done){ let paraD = invokeD(); done(null,paraD); }, paraE:function(done){ let paraE = invokeE(); done(null,paraE); } },function(error, result){ func(result.paraA,result.paraB,result.paraC,result.paraD,result.paraE);//函數func需要參數paraA,paraB...... })
使用async時,result匯總了串行階段的所有返回值,並可以在串行代碼執行完畢后使用。
注意:如果所需串行的代碼相互之間形成前后依賴關系,那么可以使用async中的series,具體使用方法為將上例中的parallel改為series。
更多async使用參考:async使用