1

使用 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() 。当他们都完成后,我希望回调与结果一起被调用。

4

1 回答 1

1

没有异步:

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

如果你的函数不遵循这个规范,你将不得不做一些丑陋的包装。

于 2013-09-03T15:49:55.793 回答