14、手写模拟实现 Promise.finally

64 阅读1分钟

首先 Promise.finally 的作用是:无论 Promise 的状态成功与否,都会进入 finally 中

const p1 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve(1)
  }, 5000)
})

p1.then(res => {
  console.log(res) // 1
}).catch(err => {
  console.log(err)
}).finally(() => { // 不接受参数
  console.log('无论Promise的结果如何,这段代码总会被执行');
})

手写 Promise.finally:

Promise.prototype.finally = function(cb) {
  return this.then(res => {
    return Promise.resolve(cb()).then(() => res)
  }, err => {
    return Promise.resolve(cb()).then(() => {
      throw err
    })
  })
}