Promise.all のエラー処理: 実践的なアプローチ
Promise.all は、複数の非同期タスクを組み合わせるための強力なツールです。ただし、エラーの処理方法が個々の Promise とは異なるため、混乱が生じることがよくあります。この記事では、Promise.all の動作をより深く掘り下げ、エラーを効果的に処理するための実用的な解決策を紹介します。
Promise.all と個別の Promise
Promise.all には、 Promise の配列を返し、すべての入力 Promise が解決されるとすぐに解決される Promise を返します。個々の Promise とは異なり、Promise.all は値の配列で解決するか、単一のエラーで拒否します。これは、入力 Promise のいずれかが拒否された場合、残りの Promise のステータスに関係なく、Promise.all はそのエラーで即座に拒否されることを意味します。
個々の Promise エラーのキャプチャ
Promise.all 内の個々の Promise のエラーをキャプチャするには、各 Promise で .catch を使用したくなるでしょう。ただし、Promise.all は最初に発生したエラーで拒否し、他の Promise からのエラーを破棄するため、このアプローチは効果的ではありません。
代わりに、より堅牢な解決策は、Promise.all で .catch を使用することです。自分自身を呼びます。このレベルでエラーを処理することにより、解決された Promise の値と拒否された Promise のエラー オブジェクトの混合を含む配列にアクセスできます。
以下は、このアプローチの実装例です。
const arrayOfPromises = state.routes.map(route => route.handler.promiseHandler()); Promise.all(arrayOfPromises) .then(arrayResolved => { // Handle array of resolved promises and errors here... }) .catch(err => { console.error(err); // Log the composite error });
カスタム Promise 処理
Promise.all のデフォルトの動作がアプリケーションに適さない場合は、カスタム Promise 処理ソリューションの実装を検討できます。一般的なアプローチの 1 つは、すべての Promise が解決または拒否された後にのみ解決される Promise.when 関数を作成することです。ただし、このアプローチは現在 ES6 仕様の一部ではありません。
結論
Promise.all でエラーを処理するには、その動作を微妙に理解する必要があります。 Promise.all 呼び出しで .catch を利用すると、解決された値を保持しながら、個々の Promise からエラーをキャプチャできます。このアプローチにより、Promise の解決に対する柔軟性と制御が向上し、非同期タスクを効果的に処理できるようになります。
以上がPromise.all でエラーを適切に処理する方法: 実践ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。