jQuery.when()

Si no se pasan argumentos a jQuery.when(), devolverá una Promesa resuelta.

Si se pasa un solo Deferred a jQuery.when(), el método devuelve su objeto Promise (un subconjunto de los métodos Deferred). Se pueden llamar métodos adicionales del objeto Promise para adjuntar devoluciones de llamada, como deferred.then. Cuando el Diferido es resuelto o rechazado, generalmente por el código que creó el Diferido originalmente, se llamarán las devoluciones de llamada apropiadas. Por ejemplo, el objeto jqXHR devuelve jQuery.ajax() es una Promesa compatible con el objeto y puede ser utilizado de esta manera:

1
2
3
$.when( $.ajax( "test.aspx" ) ).then(function( data, textStatus, jqXHR ) {
alert( jqXHR.status ); // Alerts 200
});

Si un argumento se pasa a jQuery.when() y no es un Diferida o una Promesa, será tratada como un resuelto Diferidos y cualquier doneCallbacks adjunto será ejecutada inmediatamente. A los doneCallbacks se les pasa el argumento original. En este caso, las failCallbacks que pueda establecer nunca se llamarán, ya que el Deferred nunca se rechazará. Por ejemplo:

1
2
3
$.when( { testing: 123 } ).done(function( x ) {
alert( x.testing ); // Alerts "123"
});

Si usted no lo pasan argumentos a todos, jQuery.when() devolverá un resuelto promesa.

1
2
3
$.when().then(function( x ) {
alert( "I fired immediately" );
});

En el caso de que varios Diferido objetos pasan a jQuery.when(), el método devuelve la Promesa de un nuevo «maestro» Diferida del objeto que controla el estado de agregación de todos los Deferreds que se ha pasado. El método resolverá su maestro Diferido tan pronto como se resuelvan todos los Aplazamientos, o rechazará el maestro Diferido tan pronto como se rechace uno de los Aplazamientos. Si se resuelve el master Diferido, se ejecutan los doneCallbacks para el master Diferido. Los argumentos pasados a los doneCallbacks proporcionan los valores resueltos para cada uno de los Diferidos, y coincide con el orden en el que se pasaron los Diferidos a jQuery.when(). Por ejemplo:

1
2
3
4
5
6
7
8
9
10
var d1 = $.Deferred();
var d2 = $.Deferred();
$.when( d1, d2 ).done(function ( v1, v2 ) {
console.log( v1 ); // "Fish"
console.log( v2 ); // "Pizza"
});
d1.resolve( "Fish" );
d2.resolve( "Pizza" );

En el caso de que un Diferidos se resolvió con ningún valor, el correspondiente doneCallback argumento será indefinido. Si un Deferred se resuelve a un solo valor, el argumento correspondiente mantendrá ese valor. En el caso de que un diferido se resuelva a varios valores, el argumento correspondiente será una matriz de esos valores. Por ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
var d1 = $.Deferred();
var d2 = $.Deferred();
var d3 = $.Deferred();
$.when( d1, d2, d3 ).done(function ( v1, v2, v3 ) {
console.log( v1 ); // v1 is undefined
console.log( v2 ); // v2 is "abc"
console.log( v3 ); // v3 is an array
});
d1.resolve();
d2.resolve( "abc" );
d3.resolve( 1, 2, 3, 4, 5 );

In the multiple-Deferreds case where one of the Deferreds is rejected, jQuery.when() immediately fires the failCallbacks for its master Deferred. Note that some of the Deferreds may still be unresolved at that point. Los argumentos pasados a las failCallbacks coinciden con la firma de la failCallback para el Deferred que fue rechazado. Si necesita realizar un procesamiento adicional para este caso, como cancelar cualquier solicitud Ajax inacabada, puede mantener las referencias a los objetos jqXHR subyacentes en un cierre e inspeccionarlos/cancelarlos en la llamada a error.



Deja una respuesta

Tu dirección de correo electrónico no será publicada.