首页 >web前端 >js教程 >为什么 `.then(success, failed)` 被认为是 Promise 处理中的反模式?

为什么 `.then(success, failed)` 被认为是 Promise 处理中的反模式?

Barbara Streisand
Barbara Streisand原创
2024-12-25 18:42:14769浏览

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

使用 .then(success, failed) 进行 Promise 处理的缺点

问题:

在 Bluebird Promise 文档中,.then(success, fail) 被标记为反模式。这背后的原因是什么?

答案:

与推荐的 .then(success).catch(fail) 链接不同,使用 .then(success, failure) 会带来控制流问题:

  • 如果成功回调中出现错误,则会传播到下一个.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);
}

基本原理:

不鼓励使用反模式,因为它将错误处理限制为单个最终 catch 处理程序。但是,它在以下情况下很有用:

  • 您想要在特定回调步骤中处理错误。
  • 您需要对错误和非错误情况进行不同的处理(分支控制流)。

细化:

为了避免重复回调,可以使用以下模式:

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

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