NodeJS +asynchronous:哪个控制stream选项select?

正如你所知,async.parallel是用这样的代码定义的:

async.parallel([ function (callback) { callback(err, objects); }, function (callback) { callback(err, status); }, function (callback) { callback(err, status); }, ], function (err, results) { //smth with results[N] array... }); 

并行执行所有的任务。 但是,我需要在第二和第三个函数中使用第一个函数(准确地说是objects )的callback结果。 换句话说,第一步 – 第一个function,第二个 – (第二个+第三个与第一个结果平行)。 async.waterfall似乎是一个坏主意的原因:

  1. 在瀑布function不能并行工作
  2. 我无法访问堆栈的每个结果,只能到最后。

有任何想法吗? 谢谢!

你需要waterfallparallel

 function thing1(callback) {...callback(null, thing1Result);} function thing2A(thing1Result, callback) {...} function thing2B(thing1Result, callback) {...} function thing2(thing1Result, callback) { async.parallel([ async.apply(thing2A, thing1Result), async.apply(thing2B, thing1Result) ], callback); } async.waterfall([thing1, thing2], function (error) { //all done }); 

没有必要使用asynchronous。 与asynchronous你基本上是黑色的拳击你的应用程序。 因为我不喜欢简单的任务的魔法,香草js:

 var f1 = function (cb){ ... cb (null, "result from f1"); //null error }; var f2 = function (resultFromF1, cb){ ... cb (null); //null error }; var f3 = function (resultFromF1, cb){ ... cb (null); //null error }; var main = function (cb){ f1 (function (error, resultFromF1){ if (error) return cb ([error]); var errors = []; var remaining = 2; var finish = function (error){ if (error) errors.push (error); if (!--remaining){ //f2 and f3 have finished cb (errors.length ? errors : null); } }; f2 (resultFromF1, finish); f3 (resultFromF1, finish); }); }; main (function (errors){ if (errors) return handleError (errors); //errors is an array ... });