我有这样的事情:
for (var i=0;i<result.qry.ROWCOUNT;i++) {
myAsync(i);
}
我怎么知道我所有的 Async 函数何时完成执行?
冒着有人回复“需要更多 jQuery!”的风险,我可以使用 jQuery promise 对象吗?或者延期之类的?
最佳答案
跟踪有多少异步调用未完成。当每个完成时,递减您的计数器。当您到达 0 时,您处于最后一个回调中。
var asyncsLeft = 0;
for (var i=0;i<10;++i){
asyncsLeft++;
doSomethingAsyncWithCallback(function(){
// This should be called when each asynchronous item is complete
if (--asyncsLeft==0){
// This is the last one!
}
});
}
由于 JavaScript 的单线程特性,不存在潜在的竞争条件,您可能会在所有异步调用排队之前调用回调。如果您愿意,将
asyncsLeft++
调用放在 doSomethingAsynchronous
之后是安全的。