jQuery.when()

jQuery.when()に引数が渡されない場合、解決されたPromiseを返します。単一の遅延がjQuery.when()に渡された場合、そのPromiseオブジェクト(遅延メソッドのサブセット)がメソッドによって返されます。 Promiseオブジェクトの追加のメソッドを呼び出して、deferred.thenなどのコールバックをアタッチすることができます。 Deferredが解決または拒否されると、通常はDeferredを最初に作成したコードによって、適切なコールバックが呼び出されます。 たとえば、jQuery.ajax()によって返されるjqXHRオブジェクトはPromiseと互換性のあるオブジェクトであり、このように使用できます。

1
2
3
1
2
3
td>

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

単一の引数がjQuery.when()に渡され、deferredまたはpromiseではない場合、解決されたdeferredおよび任意の引数とし添付されたdonecallbacksはすぐに実行されます。 DoneCallbacksには元の引数が渡されます。 この場合、Deferredが拒否されることはないため、設定されたfailCallbacksは呼び出されません。 たとえば、次のようにします。

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

iv id=”引数をまったく渡さない場合、jQuery.when()は解決された約束を返します。/div>

1
2
3
$.when( { testing: 123 } ).done(function( x ) {
alert( x.testing ); // Alerts "123"
});
複数のdeferredオブジェクトがjQuery.when()に渡された場合、メソッドは渡されたすべてのdeferredの集計状態を追跡する新しい”master”deferredオブジェクトからpromiseを返 このメソッドは、すべてのDeferredが解決されるとすぐにmaster Deferredを解決するか、Deferredのいずれかが拒否されるとすぐにmaster Deferredを拒否します。 Master Deferredが解決されると、master DeferredのdoneCallbacksが実行されます。 DoneCallbacksに渡される引数は、各Deferredsの解決された値を提供し、DeferredsがjQuery.when()に渡された順序と一致します。 例えば: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" );

遅延が値なしで解決された場合、対応するdonecallback引数は未定義になります。 Deferredが単一の値に解決された場合、対応する引数はその値を保持します。 Deferredが複数の値に解決された場合、対応する引数はそれらの値の配列になります。 例えば:

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. FailCallbacksに渡された引数は、拒否されたDeferredのfailCallbackの署名と一致します。 未完成のAjaxリクエストをキャンセルするなど、この場合に追加の処理を実行する必要がある場合は、基になるjqXHRオブジェクトへの参照をクロージャに



コメントを残す

メールアドレスが公開されることはありません。