我在考慮如何更好地管理運行多個異步通話的順序以實現最佳週轉時間。基本上這個過程是這樣的: 當網頁開始加載時,它顯示頁面並啓動幾個AJAX調用a(),b()和c()。在這三個完成後,運行異步調用d()。我檢查了幾個線程,如jquery execute function when two conditions are met但這不完全相同。AJAX推出多個asyc通話完成時的最終asyc通話
我試圖使用多個標誌來顯示異步調用是否完成,以及一個阻止該過程的塊功能,直到可以拍攝最後一次調用。
var aFinished=false;
function a() {
var jsonData = $.ajax({
url: "${createLink(controller:'environment', action:'a')}",
dataType: "json",
async: true
}).done(function(jsonData) {
//do something
aFinished=true;
});
}
//same flag+function for b() and c()
function d(){
blockTillAllDone();
var jsonData=$.ajax(...).done(...);
}
function blockTillAllDone(){
if(aFinished&&bFinished&&cFinished){
console.log("Ok to continue");
return;
}
else{
console.log("Have to wait");
setTimeout(blockTillAllDone(),2000);
}
}
a();b();c();d();
由於遞歸塊函數導致堆棧增長,性能並不是很好。有沒有人有更好的想法如何以更多的AJAX的方式實現這一點,而不是一個暴力破解功能? 在此先感謝!
僅供參考:任何IE都不支持這個功能,即使是11 - http://caniuse.com/#search=promise –
但IE問題可以通過使用[es6-promise](https:// github。 com/jakearchibald/es6-promise)正如答案中所述:) – ndd
謝謝Victor!我剛剛編輯了我的答案,以使其更清楚。 –