我有一個ajax查詢其次是一些函數來執行AJAX的查詢,我用的是.then()
承諾回調,以執行它們:在一個循環,然後一個函數,使用他們的組合輸出
var pictures = [];
var venues = **an array of venues**
$.get(url).then(functionA, functionFail).then(function B);
但泛函中,第一成功回調,包括一個循環,觸發關閉「n」個AJAX請求:
for(var i=0; i<n; i++) {
var venue = venues[i];
var new_url = **some_url**
$.ajax({url: new_url, async: false}).done(function(data) {
var pics = data.response.photos.items;
pictures.push(pics[0]);
pictures.push(pics[1]);
}).fail(function() {
console.log('Failed!');
});
}
這些環狀AJAX請求填滿全球pictures
陣列。圖片數組然後被函數B使用,但由於異步性質,數組不能完全填充並立即執行。
我試圖使請求與async: false
同步,但它不是完全有效的(它遺漏了循環的最後一個請求)。
如何確保在所有ajax請求完成後才執行functionB?我不想使用超時,但如果沒有別的,我會回到這個。
可能會添加一個計數器,每次請求成功計數並在計數器達到n時執行函數B? – yadejo
@yadejo不會在這裏工作。 :) – zeo
[這是我對一個類似問題的回答](https://stackoverflow.com/a/22452909/1377002)從一段時間回來,這可能會幫助你。它使用一個URL數組,每個URL用於承諾中,所有這些都傳遞給'$ .when'。 – Andy