ホームページ >ウェブフロントエンド >jsチュートリアル >`.then(success, failed)` が JavaScript Promise のアンチパターンなのはなぜですか?
.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 サイトの他の関連記事を参照してください。