我正在使用jQuery,並且有一個異步AJAX請求循環。我知道我可以通過使用方便的'$ .when.apply(array_of_requests).then()'方法等待它們全部完成。如何等待,直到嵌套異步jQuery AJAX請求已完成?
但我也有另一套AJAX請求,只在每個第一個請求完成後才執行。我想等他們完成,但我不是100%確定我找到了最好的方法。
這裏是我的請求,一個簡單的例子:
var intital_data = [1,2,3,4,5,6,7,8,9,10];
var promises = [];
var promises_inner = [];
$.each(intitial_data, function(i, n) {
var ajax_call = $.ajax({url:'http://www.domain.com/etc/'+n});
promises.push(ajax_call);
ajax_call.done(function(data) {
var ajax_call_inner = $.ajax({url:'http://www.domain.com/etc/'+data.result});
promises_inner.push(ajax_call_inner);
ajax_call_inner.done(function(data) {
// Do something with the content of data here.
});
});
});
所以,當每個十環AJAX請求完成後,我做基於第一結果的第二AJAX請求。這一切都很好。
我再有這樣的事情,因爲我要等到雙方的前十個請求(存儲的承諾陣列)和第二批(存儲在promises_inner)完成:
$.when.apply($, promises).then(
function() {
// The ten outer AJAX calls are finished now.
$.when.apply($, promises_inner).then(
function() {
// The inner AJAX calls are finished now.
}
);
}
);
在第一個$ .when.apply()。then()的'done'函數中,第二批請求還沒有完成,甚至還沒有添加到promises_inner數組中。但我發現添加一個嵌套的$ .when.apply()。then()似乎工作 - 在其「完成」功能全部請求已完成。
但我不確定這是最好的,最健壯的解決方案。我擔心它只能在巧合的情況下工作 - 它只會導致電話完成的延遲 - 而不是合乎邏輯的意義。
有更好的,更堅固的解決方案嗎?謝謝。
我很快就談到過,當我說,它似乎工作。有時,它的工作原理,但其他時候,promises_inner一直沒有所有的嵌套的AJAX查詢廣告還沒有。所以有時候內部的$ .when發生在所有的東西都被返回之前。 –