全心全意,
我想重复调用一个函数,但希望每个调用仅在前一个调用完成时运行。 Async是否适合我的需要?或者这些呼叫是并行发生的吗?
谢谢!
加里
答案 0 :(得分:27)
虽然会做你需要的,但它会串联运行每个功能。在每次运行之前,它将执行“测试”功能以确保它应该再次运行。
他们的例子:
var count = 0;
async.whilst(
function () { return count < 5; },
function (callback) {
count++;
setTimeout(callback, 1000);
},
function (err) {
// 5 seconds have passed
}
);
答案 1 :(得分:1)
As Chad noted,Async的whilst将完成这项工作。
您可能需要考虑Async的until(与while相反)。两者都做同样的工作,但关键的区别是:
async.whilst
都会调用该函数
每次测试失败时,async.until
都会调用该函数答案 2 :(得分:0)
异步的 while 应该可以为您解决问题。在参考已接受答案的代码之前,请注意您将使用的异步版本。正如已接受答案中的一条评论所暗示的那样,此循环的结构略有变化,可能不太容易发现。
异步 v2:Accepted Answer
异步 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
}
);