Node.js异步编程工具之whilst

15

大家好,

我想要重复调用一个函数,但是希望每次调用只在上一次调用完成后运行。Async 的 whilst 方法是否符合我的需求?还是这些调用是并行发生的?

谢谢!

Gary

3个回答

34

虽然will可以满足你的需求,但它会按顺序运行每个函数,在每次运行之前它会执行“test”函数以确保它应该再次运行。

他们的示例:

var count = 0;

async.whilst(
    function () { return count < 5; },
    function (callback) {
        count++;
        setTimeout(callback, 1000);
    },
    function (err) {
        // 5 seconds have passed
    }
);

1
这个 while 示例的结构已经改变,请查看文档 https://caolan.github.io/async/v3/docs.html#whilst - o1sound

2
正文:

正如 Chad 所指出的那样, Async 的 whilst 可以胜任这项工作。

您可能需要考虑使用 Async 的 until(whilst 的反义词)。两者都可以完成相同的工作,但关键区别在于:

  • async.whilst 会在每次测试通过时调用该函数
  • async.until 会在每次测试失败时调用该函数

0

异步的whilst应该能满足您的需求。请注意在查看已接受答案上的代码之前将要使用的async版本。正如已接受答案中的一条评论所建议的那样,这个循环结构已经略有变化,可能不太容易察觉。

Async v2:已接受答案

Async v3:https://caolan.github.io/async/v3/docs.html#whilst

他们的示例:

var count = 0;
async.whilst(
    function test(cb) { cb(null, count < 5); },
    function iter(callback) {
        count++;
        setTimeout(function() {
            callback(null, count);
        }, 1000);
    },
    function (err, n) {
        // 5 seconds have passed, n = 5
    }
);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接