Hier ist ein erfundenes Beispiel dafür, was los ist: 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>");
});
});
});
Ich möchte "Alles erledigt!" Wird angezeigt, nachdem alle zurückgestellten Aufgaben abgeschlossen wurden, $.when()
scheint jedoch nicht zu wissen, wie mit einem Array von zurückgestellten Objekten umgegangen werden soll. "Alles erledigt!" geschieht zuerst, weil das Array kein verzögertes Objekt ist, also geht jQuery vor und geht davon aus, dass es gerade fertig ist.
Ich weiß, dass man die Objekte wie $.when(deferred1, deferred2, ..., deferredX)
folgt an die Funktion übergeben könnte, aber es ist nicht bekannt, wie viele verzögerte Objekte in dem tatsächlichen Problem, das ich zu lösen versuche, ausgeführt werden.
$.when.apply
überhaupt kein Array verwenden , um das gleiche Ergebnis zu erzielen.