jQuery.when ()

Jeśli żadne argumenty nie zostaną przekazane do jQuery.when(), zwróci rozwiązaną obietnicę.

w przypadku przekazania pojedynczego odroczenia do jQuery.when(), metoda zwraca obiekt Promise (podzbiór metod odroczonych). Dodatkowe metody obiektu Promise mogą być wywoływane w celu dołączania wywołań zwrotnych ,takich jakdeferred.then. Gdy odroczenie zostanie rozwiązane lub odrzucone, zwykle przez kod, który pierwotnie utworzył odroczenie, zostaną wywołane odpowiednie wywołania zwrotne. Na przykład obiekt jqxhr zwracany przez jQuery.ajax() jest obiektem zgodnym z obietnicą i można go wykorzystać w ten sposób:

1
2

eśli jeden argument jest przekazywany dojQuery.when()

Jeśli pojedynczy argument jest przekazywany dojQuery.when()I nie jest to odroczenie ani obietnica, zostanie potraktowane jako odroczone i wszelkie dołączone donecallbacks zostaną wykonane natychmiast. Donecallbacks są przekazywane jako oryginalny argument. W tym przypadku wszelkie failCallbacks, które możesz ustawić, nigdy nie są wywoływane, ponieważ odroczone nigdy nie jest odrzucane. Na przykład:

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

Jeśli nie przekażesz mu żadnych argumentów, jQuery.when() zwróci rozwiązaną obietnicę.

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

w przypadku, gdy wiele obiektów odroczonych jest przekazywanych do jQuery.when(), metoda zwraca obietnicę z nowego obiektu odroczonego „Master”, który śledzi łączny stan wszystkich przekazanych deferredów. Metoda rozwiąże odroczenie nadrzędne, gdy tylko wszystkie odroczenia zostaną rozwiązane, lub odrzuci odroczenie nadrzędne, gdy tylko jeden z odroczeń zostanie odrzucony. Jeśli Master Deferred zostanie rozwiązany, wywołane zostaną doneCallbacks dla master Deferred. Argumenty przekazane do programu doneCallbacks dostarczają wartości rozwiązane dla każdego z Deferredów i dopasowują kolejność przekazywania Deferredów do jQuery.when(). Na przykład:

1
2
3
4
5
6
710
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" );

w przypadku rozwiązania deferred bez wartości, odpowiedni argument donecallback będzie niezdefiniowany. Jeśli odroczona wartość zostanie rozdzielona na jedną wartość, odpowiedni argument utrzyma tę wartość. W przypadku, gdy odroczenie jest rozdzielone na wiele wartości, odpowiednim argumentem będzie tablica tych wartości. Na przykład:

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. Argumenty przekazane do failCallbacks pasują do podpisu failCallback dla odroczonego, który został odrzucony. Jeśli potrzebujesz wykonać dodatkowe przetwarzanie w tym przypadku, takie jak anulowanie niedokończonych żądań Ajax, możesz zachować odwołania do bazowych obiektów jqXHR w zamknięciu i sprawdzić/anulować je w failCallback.



Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.