描述html
因爲nodejs中的函數調用都是異步執行的,而筆者在工程開發中函數A須要四五個參數,而這四五個參數值都是經過函數調用得到,所以按順序寫代碼時,執行到函數A時,每每函數A須要的參數值由於參數的異步調用關係,所需參數都仍是undefined。node
解決思路是保證函數A執行以前,函數A所需的四五個參數值都已經得到,能夠經過async來實現代碼的串行執行。npm
版本異步
nodejs: 6.9.5async
async: 2.2.0函數
步驟ui
一、首先安裝asyncspa
npm install async --save
二、寫async串行化代碼code
筆者函數A所需的參數a,b,c,d,e都是經過函數調用得到,可是這五個函數調用都是獨立的,之間不會相互影響,所以能夠選擇async中的 parrallel來實現,具體代碼以下:htm
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使用