여기에 무슨 일이 일어나고 있는지에 대한 고안된 예가 있습니다 : http://jsfiddle.net/adamjford/YNGcm/20/
HTML :
<a href="#">Click me!</a>
<div></div>
자바 스크립트 :
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>");
});
});
});
나는 "모두 끝났어!" 모든 지연된 작업이 완료된 후에 표시되지만 $.when()
지연된 개체 배열을 처리하는 방법을 알지 못하는 것 같습니다. "다됐다!" 배열이 Deferred 객체가 아니기 때문에 먼저 발생하므로 jQuery가 진행되어 방금 완료된 것으로 가정합니다.
나는 객체를 함수에 전달할 수 있다는 것을 알고 $.when(deferred1, deferred2, ..., deferredX)
있지만 해결하려는 실제 문제에서 얼마나 많은 지연 객체가 실행 될지 알 수 없습니다.
$.when.apply
.