混合解像度の Promise の処理
非同期プログラミングでは、一連の Promise を処理することが課題となる場合があります。複数のネットワーク リクエストがあり、そのうちの 1 つが失敗する可能性が高いシナリオを考えてみましょう。デフォルトでは、Promise.all() は 1 つの Promise が拒否されるとすぐにエラーでプロセスを停止します。すべてのリクエストからの応答をキャプチャしたい場合、これは望ましくないかもしれません。
Promise ライブラリを使用しないパターン
Promise ライブラリを使用しない 1 つの解決策は、各 Promise を次でラップすることです。 「反映」機能。この関数は、元の Promise の値またはエラーで解決され、成功または拒否を示す「ステータス」プロパティを含む新しい Promise を返します。
const reflect = p => p.then(v => ({ v, status: "fulfilled" }), e => ({ e, status: "rejected" }));
その後、各 Promise をリフレクト Promise にマップして呼び出すことができます。マップされた配列の Promise.all():
var arr = [fetch('index.html'), fetch('http://does-not-exist')] Promise.all(arr.map(reflect)).then(function (results) { var success = results.filter(x => x.status === "fulfilled"); });
このアプローチにより、成功した Promise と拒否された Promise の両方を処理できます。グレースフルリー.
組み込み Promise.allSettled()
最新のブラウザーと JavaScript 環境には、同様の機能を提供するネイティブ Promise.allSettled() メソッドが備わっていることに注意してください。これは、結果の配列で解決される Promise を返します。各結果は、対応する元の Promise のステータスと値 (満たされている場合) を表します。
以上がJavaScript で複数の Promise (拒否されたものも含む) を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。