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

`.then(success, failed)` が JavaScript Promise のアンチパターンなのはなぜですか?

DDD
DDDオリジナル
2024-12-31 16:45:09186ブラウズ

Why is `.then(success, fail)` an Antipattern in JavaScript Promises?

アンチパターン: Promise の .then(success,fail)

.then(success,fail) を回避するための引数

Bluebird Promise FAQ では、.then(success,失敗)をアンチパターンとして。 try-catch ブロックは似ているように見えますが、次のような違いがあります。

制御フローの違い:

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

制御フロー図:

[それから二人で引数](https://i.sstatic.net/WAcpP.png)

[Then-catch チェーン](https://i.sstatic.net/wX5mr.png)

同期同等:

// then: { try ... catch(e) { ... } else ... }
try { var results = some_call(); } catch(e) { logger.log(e); break then; } // else logger.log(results);

処理例外:

.catch() ロガーは、成功ロガー呼び出しからの例外も処理し、より包括的なエラー処理メカニズムを提供します。

アンチパターンの有用性の予測

アンチパターンは一般的に推奨されませんが、役立つ場合もあります場合:

  • 処理のステップに固有のエラーを処理したい場合。
  • エラーが発生したかどうかに応じて、異なるアクションを実行したい場合。

警告: このアプローチではコントロールへの分岐が発生することに注意してくださいflow.

.then(success, failed) の代替

コードの重複を避けるために、.catch と .done の使用を検討してください:

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)` が JavaScript Promise のアンチパターンなのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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