Promise.all でのエラー処理
Promise の配列を操作する場合、Promise.all ではそれらの同時解決が可能です。ただし、いずれかの Promise 内でエラーが発生した場合、チェーン全体が拒否され、他の成功した解決策がわかりにくくなります。この記事では、Promise.all チェーン内で個々の Promise エラーを効果的に処理するという課題について説明します。
Promise.all は、「全か無か」の原則に準拠しています。すべての Promise からの解決された値を含む配列で解決するか、1 つの Promise でエラーが発生するとすぐに拒否されます。その結果、他の Promise で発生する可能性のあるエラーは認識されません。
個々の Promise エラーを処理するために、一部のライブラリでは、配列内のすべての Promise の解決または拒否を待機する Promise.when などの代替手段が提供されています。ただし、JavaScript のネイティブ Promise.all を使用する、より一般的なアプローチに焦点を当てます。
提供されたコードでは、ユーザーは個々の Promise エラーをインターセプトするために catch ステートメントを追加しようとしますが、残念ながら catch ブロックはそれを行いません。アクティブ化しないでください。この問題に対処するコードの修正バージョンは次のとおりです。
existingPromiseChain = existingPromiseChain.then(function() { var arrayOfPromises = state.routes.map(function(route){ return route.handler.promiseHandler() .then(function(data) { return data; }) .catch(function(err) { return err; }); }); return Promise.all(arrayOfPromises) }); existingPromiseChain.then(function(arrayResolved) { // Process resolved values or errors from the Promises }); // Always terminate the promise chain with a catch to capture any potential errors .catch(function(err) { console.log(err.message); // Log error message if any coding error occurred });
この修正されたコードは、各 Promise (route.handler.promiseHandler()) を then/catch ブロックでラップします。エラーが発生した場合、catch ブロックはエラー オブジェクトを返し、そのオブジェクトは Promise.all が解決する配列に組み込まれます。
Promise.all の全か無かの動作に従うことで、このアプローチにより、Promise の同時解決のメリットを享受しながら、個々の Promise エラーを適切に処理することができます。したがって、開発者は、Promise.all が提供する利点を失うことなく、アプリケーション内の Promise エラーを自信を持って処理できます。
以上がPromise.all チェーン内の個々の Promise エラーをどのように処理できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。