Voici un exemple artificiel de ce qui se passe: 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>");
});
});
});
Je veux "Tout est fait!" à apparaître une fois toutes les tâches différées terminées, mais $.when()
ne semble pas savoir comment gérer un tableau d'objets différés. "Terminé!" se produit d'abord parce que le tableau n'est pas un objet différé, donc jQuery va de l'avant et suppose que c'est juste fait.
Je sais que l'on pourrait passer les objets dans la fonction comme $.when(deferred1, deferred2, ..., deferredX)
mais on ne sait pas combien d'objets différés il y aura lors de l'exécution dans le problème réel que j'essaie de résoudre.
$.when.apply
du tout pour obtenir le même résultat.