使用node.js +asynchronous模块从同步callback创build同步循环

stream行的node.js模块asynchronous包括集合和控制stream程的function,其中一些版本可以并行或串行操作。

但是其中我无法find构build一个串联循环的方法。

我试图做同样的这个伪代码:

forever { l = getline(); if (l === undefined) { break; } else { doStuff(l); } } 
  • 如果我想所有调用getLine()并行调用,我可以使用async.whilst
  • 如果我想迭代一个数组而不是像forwhile循环那样使用async.eachSeries

我能用什么来获得控制stream中的series行为而不是集合迭代?

async.whilst 不需要按 async.whilst执行它的函数,所以你可以这样做:

 var l = getline(); async.whilst( function () { return l !== undefined; }, function (callback) { doStuff(l); l = getline(); callback(); // Check function isn't called again until callback is called }, function (err) { // All done } ); 

如果你想像一个同步代码一样执行循环,你应该使用async.series或者async.waterfall

系列(任务,[callback])

运行一系列串联的函数,每个函数在前一个函数完成后运行。 如果系列中的任何函数将错误传递给其callback函数,则不会运行更多函数,系列的callback函数将立即使用错误值进行调用。 一旦任务完成,结果作为一个数组传递给最终的callback。

瀑布(任务,[callback])

运行一系列函数,每个函数都将结果传递给数组中的下一个。 但是,如果任何函数将错误传递给callback,则不会执行下一个函数,并立即调用主callback并返回错误。

下一个瀑布链callback通过一个输出输出,系列串行执行。