ホームページ  >  記事  >  ウェブフロントエンド  >  Promise.all チェーン内の個々の Promise エラーをどのように処理できますか?

Promise.all チェーン内の個々の Promise エラーをどのように処理できますか?

DDD
DDDオリジナル
2024-11-02 06:33:29921ブラウズ

How Can You Handle Individual Promise Errors Within a Promise.all Chain?

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

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