描述
由於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使用
