ホームページ > ウェブフロントエンド > jsチュートリアル > `.then(success, failed)` が Promise 処理のアンチパターンとみなされるのはなぜですか?

`.then(success, failed)` が Promise 処理のアンチパターンとみなされるのはなぜですか?

Barbara Streisand
リリース: 2024-12-25 18:42:14
オリジナル
777 人が閲覧しました

Why is `.then(success, fail)` Considered an Anti-pattern in Promise Handling?

Promise 処理に .then(success, failed) を使用する場合の欠点

質問:

Bluebird Promise ドキュメントでは、 .then(success, failed)失敗)はアンチパターンとしてラベル付けされます。この背後にある理由は何ですか?

答え:

推奨される .then(success).catch(fail) チェーンとは異なり、.then(success, failed) を使用すると、制御フローの問題が発生します。

  • 成功コールバックにエラーがある場合、それは次のコールバックに伝播されます。 .catch() ハンドラー。失敗コールバックを効果的にスキップします。

制御フローの比較:

.then(success, failed) の使用:

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

使用中.then(success).catch(fail):

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

根拠:

アンチパターンは、エラー処理を単一の最終キャッチ ハンドラーに制限するため、推奨されません。ただし、次のようなシナリオでは役立ちます。

  • 特定のコールバック ステップでエラーを処理したい。
  • エラーと非エラーのケースで異なる処理が必要な場合 (分岐制御フロー)。

改良:

コールバックの繰り返しを回避するには、次のようにします。次のパターンを使用します:

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

または、この目的で .finally() メソッドを利用できます。

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

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