使用node.js + async模块从同步回调创建同步循环

时间:2013-02-17 00:48:06

标签: javascript node.js loops async.js node-async

流行的node.js模块async包括集合和控制流的函数,其中一些版本可以并行或串行操作。

但在其中我找不到构建循环操作循环的方法。

我正在尝试和这个伪代码一样:

forever {
    l = getline();

    if (l === undefined) {
        break;
    } else {
        doStuff(l);
    }
}
  • 如果我希望同时调用getLine()的所有电话,我可以使用async.whilst
  • 如果我想迭代数组而不是像forwhile循环那样我可以使用async.eachSeries

我可以使用什么来获取控制流中的series行为而不是集合迭代?

2 个答案:

答案 0 :(得分:1)

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
    }
);

答案 1 :(得分:0)

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

  

系列(任务,[回调])

     

运行一系列函数,每个函数运行一次   之前的功能已经完成。如果系列中的任何功能通过   它的回调错误,不再运行函数和回调   系列会立即调用错误值。一旦   任务完成后,结果将传递给最终回调   作为一个数组。

     

瀑布(任务,[回调])

     

运行一系列函数,每个函数都将结果传递给   数组中的下一个。但是,如果任何函数传递错误   回调,下一个函数没有执行和主   立即调用带有错误的回调。

瀑布链回调将一个输出作为下一个输入传递,系列只是串行执行。