jforespørgsel.når ()

Hvis der ikke sendes argumenter tiljQuery.when(), returnerer det et løst løfte.

Hvis en enkelt udskudt overføres til jQuery.when(), returneres dens Løfteobjekt (en delmængde af de udskudte metoder) ved metoden. Yderligere metoder til Promise-objektet kan kaldes for at vedhæfte tilbagekald, såsom deferred.then. Når den udskudte løses eller afvises, normalt af den kode, der oprindeligt oprettede den udskudte, kaldes de relevante tilbagekald. F. eks.returneres objektet af jQuery.ajax() er et løfte-kompatibelt objekt og kan bruges på denne måde:

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

Hvis et enkelt argument overføres til jQuery.when() og det er ikke en udskudt eller et løfte, det vil blive behandlet som en løst udskudt og eventuelle donecallbacks vedhæftet vil blive henrettet straks. DoneCallbacks er bestået det oprindelige argument. I dette tilfælde kaldes eventuelle failCallbacks, du muligvis indstiller, aldrig, da den udskudte aldrig afvises. For eksempel:

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

Hvis du ikke giver det nogen argumenter overhovedet, jQuery.when() vil returnere et løst løfte.

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

i det tilfælde, hvor flere udskudte objekter overføres til jQuery.when(), returnerer metoden løftet fra et nyt “Master” udskudt objekt, der sporer den samlede tilstand af alle de deferreds, den er bestået. Metoden vil løse sin master udskudt, så snart alle udskudt løse, eller afvise master udskudt, så snart en af udskudt afvises. Hvis master udskudt er løst, udføres de færdigecallbacks for master udskudt. Argumenterne, der sendes til doneCallbacks, giver de løste værdier for hver af Deferreds og matcher den rækkefølge, som Deferreds blev sendt til jQuery.when(). Eksempel:

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 tilfælde af at en udskudt blev løst uden værdi, vil det tilsvarende donecallback-argument være udefineret. Hvis en udskudt løst til en enkelt værdi, vil det tilsvarende argument holde denne værdi. I det tilfælde, hvor en udskudt løst til flere værdier, vil det tilsvarende argument være en række af disse værdier. Eksempel:

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. Argumenterne, der sendes til failCallbacks, matcher underskrivelsen af failCallback for den udskudte, der blev afvist. Hvis du har brug for at udføre yderligere behandling af denne sag, f.eks. annullering af uafsluttede anmodninger, kan du gemme henvisninger til de underliggende objekter i en lukning og inspicere/annullere dem i failCallback.



Skriv et svar

Din e-mailadresse vil ikke blive publiceret.