Pass en una matriz de diferidos a $ .when ()

Aquí hay un ejemplo artificial de lo que está sucediendo: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>");
        });
    });
});

Quiero "¡Todo listo!" para aparecer después de que se hayan completado todas las tareas diferidas, pero$.when() no parece saber cómo manejar una matriz de objetos diferidos. "¡Todo listo!" está sucediendo primero porque la matriz no es un objeto diferido, por lo que jQuery sigue adelante y supone que se acaba de hacer.

Sé que uno podría pasar los objetos a la función como$.when(deferred1, deferred2, ..., deferredX) pero se desconoce cuántos objetos diferidos habrá en ejecución en el problema real que estoy tratando de resolver.

Respuestas a la pregunta(9)

Su respuesta a la pregunta