jQuery.when()

Si aucun argument n’est passé à jQuery.when(), il renverra une promesse résolue.

Si un seul Différé est passé à jQuery.when(), son objet Promise (un sous-ensemble des méthodes différées) est renvoyé par la méthode. Des méthodes supplémentaires de l’objet Promise peuvent être appelées pour attacher des rappels, telles que deferred.then. Lorsque le Différé est résolu ou rejeté, généralement par le code qui a créé le différé à l’origine, les rappels appropriés seront appelés. Par exemple, l’objet jqXHR renvoyé par jQuery.ajax() est un objet compatible avec les promesses et peut être utilisé de cette façon :

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

Si un seul argument est passé à jQuery.when() et ce n’est pas un Différé ou une Promesse, il sera traité comme un différé résolu et tout doneCallbacks joint sera exécuté immédiatement. Les doneCallbacks reçoivent l’argument d’origine. Dans ce cas, les appels d’échec que vous pourriez définir ne sont jamais appelés car le différé n’est jamais rejeté. Par exemple :

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

Si vous ne lui passez aucun argument, jQuery.when() retournera une promesse résolue.

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

Dans le cas où plusieurs objets différés sont passés à jQuery.when(), la méthode renvoie la Promesse d’un nouvel objet différé « maître » qui suit l’état global de tous les Déferreds auxquels il a été transmis. La méthode résoudra son maître Différé dès que tous les Reports se résoudront, ou rejettera le maître Différé dès que l’un des Reports est rejeté. Si le maître différé est résolu, les doneCallbacks pour le maître différé sont exécutés. Les arguments transmis aux doneCallbacks fournissent les valeurs résolues pour chacun des Déferreds et correspondent à l’ordre dans lequel les Déferreds ont été passés à jQuery.when(). Exemple:

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" );

Dans le cas d’un différé a été résolu sans valeur, l’argument doneCallback correspondant ne sera pas défini. Si un différé résolu à une seule valeur, l’argument correspondant contiendra cette valeur. Dans le cas où un différé résolu à plusieurs valeurs, l’argument correspondant sera un tableau de ces valeurs. Exemple:

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. Les arguments transmis aux failCallbacks correspondent à la signature du failCallback pour le Différé qui a été rejeté. Si vous devez effectuer un traitement supplémentaire pour ce cas, tel que l’annulation de requêtes Ajax inachevées, vous pouvez conserver les références aux objets jqXHR sous-jacents dans une fermeture et les inspecter / annuler dans le failCallback.



Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.