Voici un exemple artificiel de ce qu'il 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 fait!" apparaît après tout de report de tâches terminées, mais $.when()
ne semble pas savoir comment gérer un tableau de report d'objets. "Tout fait!", se passe d'abord, parce que le tableau n'est pas un Différé d'objet, de sorte que jQuery va de l'avant et suppose que c'est juste de faire.
Je sais que l'on pourrait passer les objets dans la fonction comme $.when(deferred1, deferred2, ..., deferredX)
, mais on ne sait pas combien Différés objets y seront à l'exécution dans le réel problème, je vais essayer de résoudre.