使用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
。 - 如果我想迭代一个数组而不是像
for
或while
循环那样使用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通过一个输出输出,系列串行执行。