Javascript 并行调用可变数量的函数?

Javascript 并行调用可变数量的函数?,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,使用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()。当它们全部完成时,我希望回调函数调用结果 没有异步: va

使用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);
    });
});
使用异步:

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.parallel(arr, get_something, callback);

如果您的函数不遵循此规范,您将不得不制作一些难看的包装。

没有异步:

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);
    });
});
使用异步:

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.parallel(arr, get_something, callback);

如果您的函数不遵循此规范,您将不得不制作一些难看的包装。

真的并行吗?或者只是并行的外部异步部分?@dystroy,同时,也不是真正的并行。那么get_something是否接受回调并调用它?如果不是的话,这将是很难的…@dystroy它可以做到,真的是平行的吗?或者只是并行的外部异步部分?@dystroy,同时,也不是真正的并行。那么get_something是否接受回调并调用它?如果没有,它将很难…@dystroy,当然要将结果传递到
回调
中,并按索引排序
results=[{results from 0},{results from 1}]
类似于async.parallel的工作方式。是否将result赋给回调函数以获取某物?那么,获取某物应该通过
arr[i]
而不是
i
i
是索引还是值?尝试将结果传递到
回调中
按索引排序
results=[{results from 0},{results from 1}]
类似于async.parallel的工作方式。是否将result赋给回调函数以获取某物?那么,获取某物应该通过
arr[i]
而不是
i
i
是索引还是值?