ホームページ  >  記事  >  ウェブフロントエンド  >  Throw の代わりに Promise.reject を使用する場合は?

Throw の代わりに Promise.reject を使用する場合は?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-24 05:25:30215ブラウズ

When to Use Promise.reject Instead of Throw?

Promise.reject と throw : 違いを明らかにする

JavaScript 開発でよくあるジレンマは、Promise.reject と throw の違いを理解することです。エラーです。どちらの戦略もエラーの処理に使用できますが、特定のシナリオでは微妙な違いが現れます。

Promise コールバックのコンテキストでは、 throw を使用するとエラーが効果的に通知され、次の catch ハンドラーがエラーをキャプチャします。ただし、Promise コールバックの外側で作業する場合、throw が使用されている場合、catch ハンドラーは呼び出されません。これを解決するには、代わりに Promise.reject を使用する必要があります。

次のコードを検討してください:

Promise.reject の使用:

<code class="javascript">return asyncIsPermitted()
    .then(function(result) {
        if (result === true) {
            return true;
        }
        else {
            return Promise.reject(new PermissionDenied());
        }
    });</code>

throw の使用:

<code class="javascript">return asyncIsPermitted()
    .then(function(result) {
        if (result === true) {
            return true;
        }
        else {
            throw new PermissionDenied();
        }
    });</code>

上記の例では、 throw アプローチにより、任意の Promise コールバックで catch ハンドラーがトリガーされます。ただし、asyncIsPermitted() が Promise ではなく、(setTimeout などを使用して) 非同期処理を実行する関数である場合、スローは catch によって処理されません。このような場合、エラーが確実にキャプチャされるように Promise.reject を使用する必要があります。

したがって、その簡潔さのために throw の方が望ましいかもしれませんが、Promise.reject はより柔軟性があり、確実にキャプチャするために必要な場合に使用する必要があります。非 Promise コールバック コンテキストでのエラー処理。

以上がThrow の代わりに Promise.reject を使用する場合は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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