複数のDeferredオブジェクトがjQuery.whenに渡されると、メソッドは、渡されたすべてのDeferredの集約状態を追跡する新しい「マスター」DeferredオブジェクトからPromiseを返します。
方法はどちらかになります
- すべての遅延が解決されるとすぐにマスター遅延を解決する、または
- 延期の1つが拒否されるとすぐに、マスター延期を拒否します。
マスターDeferredが解決された場合(つまり、すべてのDeferredが解決された場合)、jQuery.whenに渡されたすべてのDeferredの解決された値が渡されます。たとえば、DeferredsがjQuery.ajax()リクエストの場合、引数は、引数リストで指定された順序で、リクエストのjqXHRオブジェクトになります。
$.when( $.getJSON('foo'), $.getJSON('bar') ).done(function(foo, bar) {
// foo & bar are jqXHR objects for the requests
});
Deferredの1つが拒否された複数のDeferredの場合、jQuery.when IMMEDIATELY FIRESは、その時点で一部のDeferredがまだ解決されていない場合でも、マスターDeferredの失敗コールバックを実行します。
$.when( $.getJSON('foo'), $.getJSON('bar') ).fail(function(req) {
// req is the jqXHR object for one of the failed requests
});
すべてのDeferredがjQuery.whenに渡されたときに、コールバックを起動する必要があります。200個のOKコードでJSONオブジェクトを送信し(代わりに404個のNot FoundエラーステータスコードでJSONを送信)、done()メソッドで成功/エラーを判断できますが、APIをRESTfulに保つことをお勧めします。どうすればこれを達成できますか?