在async.forEachSeries中嵌套async.waterfall

时间:2013-11-17 19:35:32

标签: javascript node.js asynchronous

我构建了这个简单的小例子来说明我的异步问题:

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

如何确保瀑布中的函数等待上一个函数完成?

谢谢

1 个答案:

答案 0 :(得分:1)

我认为您必须将cb(null, "xx");放入第{2步的setTimeout回调中。

setTimeout(function() {
    console.log(param, "step 2"); 
    cb(null, "xx"); 
}, 1000);