我有问题的堆栈: “如何在所有异步函数完成其工作后运行回调”
这是一个例子:
function doTasks(**callback**) {
doTask1(function() {
...
});
doTask2(function() {
...
});
}
我不希望一个接一个地执行任务。并行运行它们的想法,但我完成后需要回调。 nodeJ是否具有内置功能?
现在我正在使用EventEmitter和counter的组合。每次任务完成时,它都会运行一个事件。因为我知道有多少任务已经运行。我可以数数并发出回调。但必须采取更灵活的方式。这就是我现在使用的。
var EventEmitter = require("events").EventEmitter;
var MakeItHappen = module.exports = function (runAfterTimes, callback) {
this._aTimes = runAfterTimes || 1;
this._cTimes = 0;
this._eventEmmiter = new EventEmitter();
this._eventEmmiter.addListener("try", callback);
}
MakeItHappen.prototype.try = function () {
this._cTimes += 1;
if (this._aTimes === this._cTimes) {
this._cTimes = 0;
this._eventEmmiter.emit("try", arguments);
}
}
还有其他办法吗?
答案 0 :(得分:4)
您可以使用异步库https://github.com/caolan/async
async.parallel([
function(){ ... },
function(){ ... }
], callback);
答案 1 :(得分:2)
使用计数器:
var a = function (cb){
//Asynchronous stuff
cb ();
};
var b = function (cb){
//Asynchronous stuff
cb ();
};
var remaining = 2;
var finish = function (){
if (!--remaining){
//a and b finished...
}
};
a (finish);
b (finish);