jQuery.när ()

Om inga argument skickas till jQuery.when() kommer det att returnera ett löst löfte.

om en enskild uppskjuten skickas till jQuery.when() returneras dess Promise-objekt (en delmängd av de uppskjutna metoderna) med metoden. Ytterligare metoder för Promise-objektet kan anropas för att bifoga återuppringningar, till exempel deferred.then. När uppskjuten löses eller avvisas, vanligtvis av koden som skapade uppskjuten ursprungligen, kommer lämpliga återuppringningar att ringas. Till exempel är jqxhr-objektet som returneras av jQuery.ajax() ett Löftekompatibelt objekt och kan användas på detta sätt:

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

om ett enda argument skickas till jQuery.when() och det är inte en uppskjuten eller ett löfte, det kommer att behandlas som en löst uppskjuten och eventuella donecallbacks bifogade kommer att utföras omedelbart. De doneCallbacks passeras det ursprungliga argumentet. I det här fallet anropas aldrig eventuella failCallbacks som du kan ställa in eftersom uppskjuten aldrig avvisas. Till exempel:

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

om du inte skickar några argument alls kommer jQuery.when()att returnera ett löst löfte.

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

om flera uppskjutna objekt skickas till jQuery.when()returnerar metoden löftet från ett nytt ”Master” uppskjutet objekt som spårar det sammanlagda tillståndet för alla uppskjutna objekt som det har passerat. Metoden kommer att lösa sin master uppskjuten så snart alla uppskjutna lösa, eller avvisa master uppskjuten så snart en av uppskjutna avvisas. Om mastern uppskjuten är löst, utförs doneCallbacks för mastern uppskjuten. Argumenten som skickas till doneCallbacks ger de upplösta värdena för var och en av uppskjutningarna och matchar den ordning som uppskjutningarna skickades till jQuery.when(). Exempelvis:

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

i händelse av att en uppskjuten löstes utan värde kommer motsvarande donecallback-argument att vara odefinierat. Om en uppskjuten löst till ett enda värde, kommer motsvarande argument att hålla det värdet. I det fall där en uppskjuten löst till flera värden, kommer motsvarande argument vara en array av dessa värden. Exempelvis:

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. Argumenten som skickas till failCallbacks matchar signaturen för failCallback för den uppskjutna som avvisades. Om du behöver utföra ytterligare behandling för det här fallet, till exempel att avbryta oavslutade Ajax-förfrågningar, kan du behålla referenser till de underliggande jqxhr-objekten i en stängning och inspektera/avbryta dem i failCallback.



Lämna ett svar

Din e-postadress kommer inte publiceras.