调用可变数量的函数并行?
使用async.parallel或自定义控制stream,
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()。 当他们都完成了,我想callback调用的结果。
没有asynchronous:
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); }); });
与asynchronous:
使用asynchronous假设你的asynchronous函数接受一个callback,返回一个错误作为第一个参数,结果作为第二个,就像你最后的callback:
async.parallel(arr, get_something, callback);
如果你的function不遵循这个规范,你将不得不做一些丑陋的包装。