15

问候大家,

我想重复调用一个函数,但希望每个调用仅在前一个调用完成时运行。异步是否符合我的需要?或者调用是并行发生的?

谢谢!

加里

4

3 回答 3

34

虽然可以满足您的需要,但它会按顺序运行每个功能。在每次运行之前,它都会执行“测试”功能以确保它应该再次运行。

他们的例子:

var count = 0;

async.whilst(
    function () { return count < 5; },
    function (callback) {
        count++;
        setTimeout(callback, 1000);
    },
    function (err) {
        // 5 seconds have passed
    }
);
于 2013-03-13T18:16:55.200 回答
2

正如乍得所指出的,异步的while将完成这项工作。

您可能需要考虑异步的直到(while 的倒数)。两者都做同样的工作,但主要区别在于:

  • async.whilst每次测试通过时都会调用该函数
  • async.until每次测试失败时都会调用该函数
于 2016-10-07T04:53:15.800 回答
0

异步的 while 应该为您解决问题。在参考已接受答案上的代码之前,请注意您将使用的 async 版本。正如已接受答案中的一条评论所暗示的那样,此循环的结构略有变化,可能不太容易发现。

异步 v2:接受的答案

异步 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
    }
);
于 2021-02-11T15:01:03.137 回答