Çalışma demo: http://jsbin.com/ocawoj/4/edit
function waitForAllPromisesToFinish() {
var i,
responses = [],
deferred = $.Deferred(),
helpers = {
addToResponses: function (index, data) {
responses[index] = data;
var i = 0,
isAnyNull = false;
for (i = 0; i < responses.length; i++) {
if (responses[i] === null) {
isAnyNull = true;
break;
}
}
if (isAnyNull === false) {
deferred.resolve(responses);
}
},
setupPromise: function (promise, index) {
promise.always(function() {
var args = Array.prototype.slice.call(arguments);
helpers.addToResponses(index, args);
});
}
},
ajaxPromises = Array.prototype.slice.call(arguments);
for (i = 0; i < ajaxPromises.length; i++) {
responses[i] = null;
}
for (i = 0; i < ajaxPromises.length; i++) {
helpers.setupPromise(ajaxPromises[i], i);
}
return deferred.promise();
}
fonksiyonu bir söz verir. Sağladığınız bir işleyiciden $ .when() öğesine biraz farklı bir işleyici eklersiniz. Fonksiyon her ajax sözünün cevaplarını takip eder. Tüm ajax vaatlerinin, ya başarı ya da başarısızlık verisi döndürdüğünü bulduğunda, bu sözünü çözecektir.
Aynı şeyi elde etmenin daha etkili yolları olabilir, ancak bu düşündüğüm ilk şey.
Geçerli kodunuzu gönderirseniz yardımcı olur .. – Nelson