jQuery.quando ()

Se nenhum argumento for passado para jQuery.when(), ele retornará uma promessa resolvida.

Se um único diferido for passado para jQuery.when(), o seu objecto de Promessa (um subconjunto dos métodos diferidos) é devolvido pelo método. Métodos adicionais do objeto promessa podem ser chamados para anexar callbacks, tais como deferred.then. Quando o diferido é Resolvido ou rejeitado, geralmente pelo código que criou o diferido originalmente, os callbacks apropriados serão chamados. Por exemplo, o jqXHR objeto retornado por jQuery.ajax() é uma Promessa compatível com o objeto e podem ser utilizados da seguinte maneira:

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

Se um único argumento é passado para jQuery.when() e não é um Adiada ou uma Promessa, será tratada como uma resolvido Diferidos e qualquer doneCallbacks anexado será executada imediatamente. Os doneCallbacks são aprovados o argumento original. Neste caso, quaisquer falhas que você pode definir nunca são chamados, uma vez que o diferido nunca é rejeitado. Por exemplo:

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

Se você não passar nenhum argumento em tudo, jQuery.when() irá retornar uma resolvido promessa.

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

No caso em que várias Diferidos objetos são passados para jQuery.when(), o método retorna a Promessa de um novo “mestre” Adiada objeto que controla o estado de agregação de todos os Deferreds que foi passado. O método resolverá o diferimento do seu mestre assim que todos os Deferreds resolverem, ou rejeitará o diferido mestre assim que um dos Deferreds for rejeitado. Se o mestre diferido for resolvido, os doneCallbacks para o mestre diferido são executados. Os argumentos passados aos doneCallbacks fornecem os valores resolvidos para cada um dos Deferreds, e corresponde à ordem que os Deferreds foram passados para jQuery.when(). Por exemplo:

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

No caso de um Diferidos foi resolvido com nenhum valor, correspondente doneCallback argumento será indefinido. Se um diferido resolvido para um único valor, o argumento correspondente deterá esse valor. No caso em que um diferido resolvido para valores múltiplos, o argumento correspondente será uma matriz desses valores. Por exemplo:

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. Os argumentos passados para os failCallbacks coincidem com a assinatura do failCallback para o diferido que foi rejeitado. Se você precisar realizar o processamento adicional para este caso, como cancelar quaisquer pedidos Ajax inacabados, você pode manter referências aos objetos jqxhr subjacentes em um encerramento e inspecioná-los/cancelá-los no failCallback.



Deixe uma resposta

O seu endereço de email não será publicado.