jQuery.when()

Wenn keine Argumente an jQuery.when() , wird ein aufgelöstes Versprechen zurückgegeben.

Wenn eine einzelne Deferred an jQuery.when()übergeben wird, wird ihr Promise Objekt (eine Teilmenge der Deferred Methoden) von der Methode zurückgegeben. Zusätzliche Methoden des Promise-Objekts können aufgerufen werden, um Rückrufe anzuhängen, z. B. deferred.then. Wenn das Latente aufgelöst oder abgelehnt wird, normalerweise durch den Code, der das Latente ursprünglich erstellt hat, werden die entsprechenden Rückrufe aufgerufen. Das von jQuery.ajax() zurückgegebene jqXHR-Objekt ist beispielsweise ein Promise-kompatibles Objekt und kann folgendermaßen verwendet werden:

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

Wenn ein einzelnes Argument an jQuery.when() übergeben wird und es sich nicht um eine Verzögerung oder ein Versprechen handelt, wird es als aufgelöstes verzögertes und alle angehängten doneCallbacks werden sofort ausgeführt. Den doneCallbacks wird das ursprüngliche Argument übergeben. In diesem Fall werden möglicherweise festgelegte failCallbacks niemals aufgerufen, da der Deferred niemals abgelehnt wird. Zum Beispiel:

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

Wenn Sie überhaupt keine Argumente übergeben, jQuery.when() gibt ein aufgelöstes Versprechen zurück.

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

Für den Fall, dass mehrere verzögerte Objekte an jQuery.when() übergeben werden, gibt die Methode das Versprechen eines neuen „Master“ -verzögerten Objekts zurück, das den Aggregatzustand aller übergebenen Deferreds verfolgt. Die Methode löst ihren Master Deferred auf, sobald alle Deferreds aufgelöst werden, oder lehnt den master Deferred ab, sobald einer der Deferreds abgelehnt wird. Wenn der Master Deferred aufgelöst wird, werden die doneCallbacks für den Master Deferred ausgeführt. Die an die doneCallbacks übergebenen Argumente liefern die aufgelösten Werte für jeden der Deferreds und stimmen mit der Reihenfolge überein, in der die Deferreds übergeben wurden jQuery.when() . Beispielsweise:

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

Falls ein Deferred ohne Wert aufgelöst wurde, ist das entsprechende doneCallback-Argument undefiniert. Wenn ein Deferred auf einen einzelnen Wert aufgelöst wird, enthält das entsprechende Argument diesen Wert. In dem Fall, in dem ein Deferred in mehrere Werte aufgelöst wird, ist das entsprechende Argument ein Array dieser Werte. Beispielsweise:

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. Die an die failCallbacks übergebenen Argumente stimmen mit der Signatur des Failcallbacks für die zurückgewiesene Verzögerung überein. Wenn Sie für diesen Fall eine zusätzliche Verarbeitung durchführen müssen, z. B. das Abbrechen nicht abgeschlossener Ajax-Anforderungen, können Sie Verweise auf die zugrunde liegenden jqXHR-Objekte in einem Abschluss beibehalten und diese im failCallback überprüfen / abbrechen.



Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.