node.js在执行'n'异步回调后执行函数

ras*_*cio 5 events asynchronous callback node.js

我无法知道在执行' n '异步函数后如何执行回调,例如:

var after4AsyncOperation = function(){
    //do something...
}
process.nextTick(function(){
    //do stuff
})
process.nextTick(function(){
    //do stuff
})
process.nextTick(function(){
    //do stuff
})
process.nextTick(function(){
    //do stuff
})
Run Code Online (Sandbox Code Playgroud)

有没有办法after4AsyncOperation在4个异步函数之后执行而不必将函数写入另一个内部,例如:

    var after4AsyncOperation = function(){
    //do something...
}
process.nextTick(function(){
    //do stuff
    process.nextTick(function(){
        //do stuff
        process.nextTick(function(){
            //do stuff
            process.nextTick(function(){
                //do stuff
                after4Asyncoperation();
            })
        })
    })
})
Run Code Online (Sandbox Code Playgroud)

Aar*_*our 8

我建议使用一个异步库,如Caolan的Async.然后,您可以使用async.parallel,async.seriesasync.auto. auto是最灵活的,但比其他的慢一点; 选择之间parallel并且series需要更多关于你要做什么的信息 - 你的第一个例子是并行操作,但你的第二个例子是串联的.

但是,如果您不想使用库,则可以编写自定义内容.我会这样做:

var numFuncs = 4;
var callback = function(){
  numFuncs--;
  if(numFuncs == 0) {
    after4AsyncOperation();
  }
}
var after4AsyncOperation = function(){
    //do something...
}
process.nextTick(function(){
    //do stuff
    callback();
})
process.nextTick(function(){
    //do stuff
    callback();
})
process.nextTick(function(){
    //do stuff
    callback();
})
process.nextTick(function(){
    //do stuff
    callback();
})
Run Code Online (Sandbox Code Playgroud)

这可以通过从我们期望回调被调用的次数开始倒数(numFuncs),并且只after4AsyncOperation在我们被调回正确次数时才调用.