大家好,
我想要重复调用一个函数,但是希望每次调用只在上一次调用完成后运行。Async 的 whilst 方法是否符合我的需求?还是这些调用是并行发生的?
谢谢!
Gary
大家好,
我想要重复调用一个函数,但是希望每次调用只在上一次调用完成后运行。Async 的 whilst 方法是否符合我的需求?还是这些调用是并行发生的?
谢谢!
Gary
虽然will可以满足你的需求,但它会按顺序运行每个函数,在每次运行之前它会执行“test”函数以确保它应该再次运行。
他们的示例:
var count = 0;
async.whilst(
function () { return count < 5; },
function (callback) {
count++;
setTimeout(callback, 1000);
},
function (err) {
// 5 seconds have passed
}
);
正如 Chad 所指出的那样, Async 的 whilst 可以胜任这项工作。
您可能需要考虑使用 Async 的 until(whilst 的反义词)。两者都可以完成相同的工作,但关键区别在于:
async.whilst
会在每次测试通过时调用该函数async.until
会在每次测试失败时调用该函数异步的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
}
);