Berikut adalah contoh yang dibuat-buat tentang apa yang terjadi: http://jsfiddle.net/adamjford/YNGcm/20/
HTML:
<a href="#">Click me!</a>
<div></div>
JavaScript:
function getSomeDeferredStuff() {
var deferreds = [];
var i = 1;
for (i = 1; i <= 10; i++) {
var count = i;
deferreds.push(
$.post('/echo/html/', {
html: "<p>Task #" + count + " complete.",
delay: count
}).success(function(data) {
$("div").append(data);
}));
}
return deferreds;
}
$(function() {
$("a").click(function() {
var deferreds = getSomeDeferredStuff();
$.when(deferreds).done(function() {
$("div").append("<p>All done!</p>");
});
});
});
Saya ingin "Semua selesai!" muncul setelah semua tugas yang ditangguhkan selesai, tetapi $.when()
tampaknya tidak tahu bagaimana menangani array objek yang Ditangguhkan. "Semua selesai!" terjadi pertama kali karena array bukan objek yang ditangguhkan, jadi jQuery berjalan di depan dan menganggap itu baru saja selesai.
Saya tahu orang bisa meneruskan objek ke fungsi seperti $.when(deferred1, deferred2, ..., deferredX)
tetapi tidak diketahui berapa banyak objek yang ditangguhkan akan ada di eksekusi dalam masalah aktual yang saya coba selesaikan.
$.when.apply
sama sekali untuk mendapatkan hasil yang sama.