2015-11-03 126 views
0

我打电话jQuery的异步对于这样的循环调用:等到所有异步调用完成

for (var index = 0; index < activeSheets.length; index++) { 
      service.getAsync().then(donecallback, failcallback); 
} 

,当我得到donecallback,根据返回的数据,我需要运行其他for循环,甚至更多运行电话,

是否有任何简单的方法来等待,直到他们都完成,看看是否全部通过或一些失败?

+2

请参阅http://stackoverflow.com/questions/6538470/jquery-deferred-waiting-for-multiple-ajax-requests-to-finish –

回答

2

使用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

我这样做。谢谢。 –

0

你可能寻找Promise.all(),它将执行所有的承诺,并等待,直到他们全部或其中一个失败。

var asyncs = []; 
for (var index = 0; index < activeSheets.length; index++) { 
    asyncs.push(service.getAsync()); 
} 
Promise.all(asyncs).then(donecallback, failcallback); 
相关问题