這是一個簡單的問題,若是你對async已經很是熟悉了,那就不要看了。javascript
最初的代碼是這樣的:java
var async=require('async'); async.parallel([function(callback){ callback(null); },function(callback){ callback(null); }],function(err){ console.log("我是parallel的callback"); });
執行結果爲:異步
我是parallel的callbackasync
在parallel的第一個方法中加入一個waterfall函數
var async=require('async'); async.parallel([function(callback){ async.waterfall([function(callback){ callback(null,"abc"); },function(arg1,cb){ console.log("waterfall第一個函數傳來的參數爲:"+arg1); callback(null,"bgd"); }],function(err,restult){ console.log("我是waterfall的callback"); console.log("執行的最終結果是:"+restult); }); //callback(null); },function(callback){ callback(null); }],function(err){ console.log("我是parallel的callback"); });
執行結果爲:ui
waterfall第一個函數傳來的參數爲:abc
我是parallel的callbackrest
可見,此時在waterfall中調用callback依舊是調用的parallel中的callback。code
替換waterfall中的callback爲cb。ip
var async=require('async'); async.parallel([function(callback){ async.waterfall([function(cb){ cb(null,"abc"); },function(arg1,cb){ console.log("waterfall第一個函數傳來的參數爲:"+arg1); cb(null,"bgd"); }],function(err,restult){ console.log("我是waterfall的callback"); console.log("執行的最終結果是:"+restult); }); callback(null); },function(callback){ callback(null); }],function(err){ console.log("我是parallel的callback"); });
執行結果:io
我是parallel的callback
waterfall第一個函數傳來的參數爲:abc
我是waterfall的callback
執行的最終結果是:bgd
把callback移到cb裏面去,就OK了,這個比較好理解。
var async=require('async'); async.parallel([function(callback){ async.waterfall([function(cb){ cb(null,"abc"); },function(arg1,cb){ console.log("waterfall第一個函數傳來的參數爲:"+arg1); cb(null,"bgd"); }],function(err,restult){ console.log("我是waterfall的callback"); console.log("執行的最終結果是:"+restult); callback(null); }); },function(callback){ callback(null); }],function(err){ console.log("我是parallel的callback"); });
執行結果:
waterfall第一個函數傳來的參數爲:abc
我是waterfall的callback
執行的最終結果是:bgd
我是parallel的callback
在這種異步嵌套異步的狀況下,應該注意callback的命名,區分一下,以防出錯。