jQuery.whenのドキュメントから
Deferredの1つが拒否された複数のDeferredの場合、jQuery.whenはマスターDeferredのfailCallbacksをすぐに起動します。一部の延期は、その時点でまだ解決されていない可能性があることに注意してください。この場合、未完了のajaxリクエストをキャンセルするなど、追加の処理を実行する必要がある場合は、基になるjqXHRオブジェクトへの参照をクロージャに保持し、failCallbackでそれらを検査/キャンセルできます。
つまり、各リクエストへの参照を保持し、必要に応じて手動で確認する必要があります。
難しいのは、failコールバックが呼び出されたときに、任意の数の遅延が未処理である可能性があるため、その状態では失敗も成功もしていないことです。
この場合、フェイルハンドラーに何が渡されるかについて、ドキュメントでもう少し詳しく説明されていることを望みます。ただし、ソースコードから判断すると、失敗ハンドラーが受け取る引数は、どちらのDeferredが最初に失敗するかによって異なるようです。
args[ i ].promise().then( resolveFunc(i), deferred.reject );
私はjQuery内部の専門家ではありませんが、これにより、各Deferredreject
が、通常ハンドラーに渡す引数を使用して「マスター」Deferredメソッドを呼び出すことができるようになると思います。あなたが私に尋ねるなら、理想的ではありません...しかし、私はこれを誤解している可能性があります。
私は彼らがこれを意味したのだろうかと思います:
args[ i ].promise().then( resolveFunc(i), func() { deferred.reject(args); } );