如何在所有并行功能运行完成他们的工作时运行回调?

问题描述:

我得到堆栈的问题: “如何运行的回调毕竟异步函数完成自己的工作”如何在所有并行功能运行完成他们的工作时运行回调?

下面的例子:

function doTasks(**callback**) { 
    doTask1(function() { 
    ... 
    }); 

    doTask2(function() { 
    ... 
    }); 
} 

我不想跑了一个又一个的任务。并行运行它们的想法,但我完全需要回调。 nodeJs是否具有内置功能?

现在我正在使用EventEmitter和计数器的组合。每次任务完成时,它都会运行一个事件。因为我知道已经运行了多少任务。我可以数它并发出回调。但一定要更灵活一些。这里是我现在使用的。

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); 
    } 
} 

有没有另一种方法呢?

可以使用异步库,https://github.com/caolan/async

async.parallel([ 
    function(){ ... }, 
    function(){ ... } 
], callback); 

使用计数器:

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);