Tratar con matrices de objetos diferidos

Desde que usa$.Deferred Me he encontrado con este escenario un par de veces: tengo una lista de valores, cada uno de los cuales produce un Objeto Diferido de alguna manera y quiero ejecutar una devolución de llamada una vez que se resuelvan todos los Objetos Diferidos.

Un ejemplo más concreto sería algo como esto:

var urls = [ 'foo.com', 'bar.com', 'baz.com', 'qux.com' ],
    defers = [], defer;

for( var i = 0, j = urls.length; i < j; i++ ){
    defer = $.ajax({
        url: 'http://' + urls[ i ]
    });

    defers.push(defer);
}

$.when.apply(window, defers).done(function(){
    // Do Something
});

¿Hay una solución más elegante que el código en mi ejemplo?

Respuestas a la pregunta(3)

Su respuesta a la pregunta