我构建了这个简单的小例子来说明我的异步问题:
var array = ["a", "b", "c", "d"];
async.forEachSeries(array, function(entry, callback){
console.log(entry);
async.waterfall([
function(cb){
console.log("step 1");
cb(null, "x");
},
function(param, cb){
setTimeout(function(){console.log(param, "step 2");}, 1000);
cb(null, "xx");
},
function(param, cb){
console.log(param, "step 3");
cb("xxx");
}
], function(result, err){
console.log(result, "waterfall done");
callback();
});
}, function(err){
if(err) console.log("ERROR: "+ err);
});
这是
的输出 a
step 1
step 3 xx
end xxx
b
step 1
step 3 xx
end xxx
c
step 1
step 3 xx
end xxx
d
step 1
step 3 xx
end xxx
step 2 x
step 2 x
step 2 x
step 2 x
如何确保瀑布中的函数等待上一个函数完成?
谢谢
答案 0 :(得分:1)
我认为您必须将cb(null, "xx");
放入第{2步的setTimeout
回调中。
setTimeout(function() {
console.log(param, "step 2");
cb(null, "xx");
}, 1000);