前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【点滴】在 promise 中 then 和 finally 有什么区别

【点滴】在 promise 中 then 和 finally 有什么区别

作者头像
疯狂的技术宅
发布2021-04-01 00:29:06
2.1K0
发布2021-04-01 00:29:06
举报
文章被收录于专栏:京程一灯京程一灯

看上去 promise.prototype.then()promise.prototype.finally 似乎非常相似。但是你需要明白它们有一些重要的差异。

第一个也最明显的是 finally() 没有得到 promise 链的结果。由于 finally() 没有收到值,因此无法更改 promise 的已解决值。

代码语言:javascript
复制
new Promise((resolve, reject) => resolve(10))
  .then(x => {
    console.log(x); // 10
    return x + 1;
  })
  .finally(x => {
    console.log(x); // undefined
    return x + 2;
  });
// Promise resolves to 11, the return value of then()

另一个差异与错误处理以及如何解决 promise 链有关。有时,您可能想要推迟捕获 promise 链中的错误,从而允许你在其他地方处理。在这种情况下,promise 链的 then() 将不会被执行,而 finally() 会。并且如果上一个 catch() 抛出,你最终会处于相同的情形之下。

代码语言:javascript
复制
new Promise((resolve, reject) => reject(0))
  .catch(x => {
    console.log(x); // 0
    throw x;
  })
  .then(x => {
    console.log(x); // 将不会执行
  })
  .finally(() => {
    console.log('clean up'); // 'clean up'
  });
// Uncaught (in promise) 0

这里的重点是,除非有非常特殊的原因,否则不应该替换 then()finally()。 根据经验,finally() 应该用于清理(清除超时,使引用为空,重置 UI 状态等)。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-03-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端先锋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档