1

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

但是其中我找不到一种方法来构建一个串联运行的循环。

我正在尝试与此伪代码相同的操作:

forever {
    l = getline();

    if (l === undefined) {
        break;
    } else {
        doStuff(l);
    }
}
  • 如果我希望getLine()并行调用所有调用,我可以使用async.whilst.
  • 如果我想迭代一个数组而不是制作类似 a fororwhile循环的东西,我可以使用async.eachSeries.

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

4

2 回答 2

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
    }
);
于 2013-02-17T01:35:00.687 回答
0

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

系列(任务,[回调])

依次运行一系列函数,每个函数在前一个函数完成后运行。如果系列中的任何函数将错误传递给其回调,则不再运行任何函数,并且立即使用错误值调用系列的回调。任务完成后,结果将作为数组传递给最终回调。

瀑布(任务,[回调])

依次运行一组函数,每个函数将其结果传递给数组中的下一个函数。但是,如果任何函数将错误传递给回调,则不会执行下一个函数,并且会立即调用带有错误的主回调。

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

于 2013-02-17T08:31:15.940 回答