我有这样的事情:

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 之后是安全的。

10-06 08:09