等到所有异步调用完成
问题描述:
我打电话jQuery的异步对于这样的循环调用:等到所有异步调用完成
for (var index = 0; index < activeSheets.length; index++) {
service.getAsync().then(donecallback, failcallback);
}
,当我得到donecallback,根据返回的数据,我需要运行其他for循环,甚至更多运行电话,
是否有任何简单的方法来等待,直到他们都完成,看看是否全部通过或一些失败?
答
使用jQuery延迟API。 https://api.jquery.com/jquery.when/
它需要多个承诺作为参数。
$.when(promise, promise, promise)
.done(function success() { })
.fail(function failure() { })
.always(function always() { });
然后,它可以解决,如果所有承诺的成功,或者如果其中任何失败,失败。
+1
您不能将这种承诺数组传递给jq'$ .when() '方法,它应该是例如:'$ .when.apply($,[promise,promise,promise])' –
+0
我这样做。谢谢。 –
答
你可能寻找Promise.all()
,它将执行所有的承诺,并等待,直到他们全部通或其中一个失败。
var asyncs = [];
for (var index = 0; index < activeSheets.length; index++) {
asyncs.push(service.getAsync());
}
Promise.all(asyncs).then(donecallback, failcallback);
请参阅http://*.com/questions/6538470/jquery-deferred-waiting-for-multiple-ajax-requests-to-finish –