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

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

DDD
发布: 2024-12-31 16:45:09
原创
209 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板