使用async.parallel或自定义控制流,

arr = [1, 2, 3, 4, 5, 3, 2, 3, 4, 5] //arr could be any length

get_something = function(num, cb){
  async_io(num, function (err, results){
        cb()
  });

}


我想在“并行”数组的每个成员上运行get_something()。当它们全部完成后,我希望通过结果调用该回调。

最佳答案

没有异步:

var n = arr.length, results = new Array(n), oneIsDone = function(index, result){
   results[index] = result;
   if (--n===0) callback(results);
}
arr.forEach(function(val i){
    get_something(val, function(result){
       oneIsDone(i, result);
    });
});


使用异步:

使用async假设您的异步函数接受一个回调,该回调返回一个错误作为第一个参数,结果返回第二个,就像您的最终回调一样:

async.parallel(arr, get_something, callback);


如果您的函数不遵循此规范,则必须进行一些难看的包装。

关于javascript - 并行调用可变数量的函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18596408/

10-09 20:56