ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript で複数の Promise (拒否されたものも含む) を処理するにはどうすればよいですか?

JavaScript で複数の Promise (拒否されたものも含む) を処理するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-18 06:07:14
オリジナル
893 人が閲覧しました

How Can I Handle Multiple Promises, Including Rejected Ones, in JavaScript?

混合解像度の 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート