Promise.prototype.finally 的作用,如何自己实现 Promise.prototype.finally

点击上方 三分钟学前端,关注公众号

回复交流,加入前端编程面试算法每日一题群

面试官也在看的前端面试资料

Promise.prototype.finally()  的作用

Promise.prototype.finally() 是 ES2018 新增的特性,它回一个 Promise ,在 promise 结束时,无论 Promise 运行成功还是失败,都会运行 finally ,类似于我们常用的  try {...} catch {...} finally {...}

Promise.prototype.finally()  避免了同样的语句需要在 then()catch() 中各写一次的情况

new Promise((resolve, reject) => {
  setTimeout(() => resolve("result"), 2000)
})
  .then(result => console.log(result))
  .finally(() => console.log("Promise end"))

// result
// Promise end

reject :

new Promise((resolve, reject) => {
  throw new Error("error")
})
  .catch(err => console.log(err))
  .finally(() => console.log("Promise end"))

// Error: error
// Promise end

注意:

  • finally 没有参数

  • finally 会将结果和 error 传递

new Promise((resolve, reject) => {
  setTimeout(() => resolve("result"), 2000)
})
  .finally(() => console.log("Promise ready"))
  .then(result => console.log(result))

// Promise ready
// result

手写一个 Promise.prototype.finally()

不管 Promise 对象最后状态如何,都会执行的操作

MyPromise.prototype.finally = function (cb) {
  return this.then(function (value) {
    return MyPromise.resolve(cb()).then(function () {
      return value
    })
  }, function (err) {
    return MyPromise.resolve(cb()).then(function () {
      throw err
    })
  })
}

来自:https://github.com/sisterAn/blog

最后

欢迎关注「三分钟学前端」,回复「交流」自动加入前端三分钟进阶群,每日一道编程算法面试题(含解答),助力你成为更优秀的前端开发!

》》面试官也在看的前端面试资料《《

“在看和转发”就是最大的支持

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值