Đây là một ví dụ giả định về những gì đang diễn ra: 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>");
});
});
});
Tôi muốn "Tất cả đã hoàn tất!" xuất hiện sau khi tất cả các nhiệm vụ hoãn lại đã hoàn thành, nhưng $.when()
dường như không biết cách xử lý một mảng các đối tượng Trì hoãn. "Tất cả đã được làm xong!" đang xảy ra đầu tiên vì mảng không phải là đối tượng Trì hoãn, vì vậy jQuery đi trước và cho rằng nó vừa hoàn thành.
Tôi biết người ta có thể chuyển các đối tượng vào hàm như thế nào $.when(deferred1, deferred2, ..., deferredX)
nhưng không biết có bao nhiêu đối tượng Trì hoãn sẽ có lúc thực thi trong vấn đề thực tế mà tôi đang cố gắng giải quyết.
$.when.apply
toàn để có được kết quả tương tự.