首先 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
})
})
}