2015-11-03 169 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); 
相關問題