ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript ですべての約束 (失敗する約束も含む) を処理するにはどうすればよいですか?

JavaScript ですべての約束 (失敗する約束も含む) を処理するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-27 14:30:10216ブラウズ

How Can I Process All Promises, Even Those That Fail, in JavaScript?

失敗に関係なく Promise を処理する

ネットワーク リクエストを含む一連の Promise を操作する場合、多くの場合、一部のリクエストが失敗するシナリオを処理する必要があります。失敗するかもしれない。デフォルトでは、Promise.all() は最初の拒否に遭遇すると早期に終了します。ただし、特定の状況では、失敗した Promise も含め、すべての Promise が完了するまで待機することもできます。

推奨パターン

1 つのアプローチは、 Reflect() 関数。Promise を、満たされたプロパティまたは拒否されたプロパティのいずれかを持つステータス オブジェクトに解決される Promise に変換します。配列内の Promise をreflect() 関数にマッピングすることで、ステータスに関係なく、すべての Promise を確実に完了させることができます。

const reflect = p => p.then(v => ({ v, status: "fulfilled" }), e => ({ e, status: "rejected" }));

Promise.all(arr.map(reflect)).then(results => {
  const success = results.filter(x => x.status === "fulfilled");
});

この例では、Promise.all() が変更されたすべての完了を待機する Promise の配列。 success 配列には成功した Promise の結果が含まれるため、ネットワーク障害を適切に処理しながら、利用可能なデータに基づいてアクションを続行できるようになります。

改善されたソリューション (Promise.allSettled)

最新の JavaScript には Promise.allSettled が組み込まれており、目的の動作を実現するためのより簡潔かつ効率的な方法を提供します。これは、Promise の結果に関係なく、結果の配列に解決される Promise を返します。各結果には、履行または拒否のステータスが含まれます。

Promise.allSettled([promise]).then(([result]) => {
  // reach here regardless
  // { status: "fulfilled", value: 33 }
});

以上がJavaScript ですべての約束 (失敗する約束も含む) を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。