ホームページ > ウェブフロントエンド > jsチュートリアル > Promise で `.then(success, failed)` を使用することがアンチパターンになるのはどのような場合ですか?

Promise で `.then(success, failed)` を使用することがアンチパターンになるのはどのような場合ですか?

Patricia Arquette
リリース: 2024-12-28 18:36:13
オリジナル
842 人が閲覧しました

When is Using `.then(success, fail)` an Antipattern in Promises?

.then(success, failed): Promise のアンチパターンとみなされるのはどのような場合ですか?

Bluebird Promise FAQ では、.then(success, failed) にフラグが立てられていますアンチパターンとして。これは、特に try ステートメントと catch ステートメントに関する説明を理解していない場合、混乱する可能性があります。

.then(success, failed) の問題は何ですか?

.then() 呼び出しコールバックがエラーをスローした場合に拒否する Promise を返します。これは、成功ロガーが失敗した場合、エラーは成功に伴う失敗コールバックではなく、次の .catch() コールバックに渡されることを意味します。

制御フロー図

.then の制御フロー2 つの引数と .then-catch チェーンを以下に示します。

[.then と .then-catch の制御フロー図のイメージ] .then-catch チェーン]

同等の同期コード

これを同期コードで表現するには:

// some_promise_call().then(logger.log, logger.log)
then: {
    try {
        var results = some_call();
    } catch(e) {
        logger.log(e);
        break then;
    } // else
        logger.log(results);
}
ログイン後にコピー

.then(success) と .then().catch ()

これを比較してくださいwith:

// some_promise_call().then(logger.log).catch(logger.log)
try {
    var results = some_call();
    logger.log(results);
} catch(e) {
    logger.log(e);
}
ログイン後にコピー

この場合、キャッチ ロガーは成功ロガー呼び出しからの例外を処理します。

.then(success, failed) がアンチパターンになるのはどのような場合ですか?

このパターンに対する反論は、一般にすべての処理ステップでエラーを検出し、連鎖的に使用することを避ける必要があるということです。すべてのエラーに対して最終ハンドラーは 1 つだけであることが期待されます。

ただし、このパターンは、特定のステップで特定のエラーを処理し、エラーが発生しない場合に別のアクションを実行する場合に役立ちます。これにより制御フローが分岐することに注意してください。

改良されたアンチパターンの例

次の点を考慮してください。

some_promise_call()
   .catch(function(e) {
       return e; // it's OK, we'll just log it
   })
   .done(function(res) {
       logger.log(res);
   });
ログイン後にコピー

あるいは、この目的で .finally() を使用することもできます。

以上がPromise で `.then(success, failed)` を使用することがアンチパターンになるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート