首页 >web前端 >js教程 >为什么 `.then(success, failure)` 是 JavaScript Promise 中的反模式?

为什么 `.then(success, failure)` 是 JavaScript Promise 中的反模式?

DDD
DDD原创
2024-12-31 16:45:09180浏览

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

反模式:Promise 中的 .then(success, failed)

避免 .then(success, failed) 的论证

Bluebird 承诺常见问题解答建议不要使用 .then(success,失败)作为反模式。虽然 try-catch 块看起来相似,但存在差异:

控制流差异:

.then(success, failure) 返回一个将被拒绝的承诺,如果成功回调会抛出错误。这意味着如果成功记录器失败,错误将传递给 .catch() 回调,而不是失败回调。

控制流程图:

[然后用两个参数](https://i.sstatic.net/WAcpP.png)

[Then-catch chain](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() 记录器还将处理成功的异常记录器调用,提供更全面的错误处理机制。

预测反模式的有用性

虽然反模式通常不被鼓励,但它在以下情况下可能很有用:

  • 您想要处理特定于某个步骤的错误
  • 您希望根据是否发生错误来采取不同的操作。

警告:请注意,这种方法会在控制流中引入分支。

替代 .then(成功,失败)

为了避免代码重复,请考虑使用 .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, failure)` 是 JavaScript Promise 中的反模式?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn