Promise.prototype.finally 的作用,如何自己實(shí)現(xiàn) Promise.prototype.finally
點(diǎn)擊上方 三分鐘學(xué)前端,關(guān)注公眾號
回復(fù)交流,加入前端編程面試算法每日一題群
Promise.prototype.finally() 的作用
Promise.prototype.finally() 是 ES2018 新增的特性,它回一個 Promise ,在 promise 結(jié)束時,無論 Promise 運(yùn)行成功還是失敗,都會運(yùn)行 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沒有參數(shù) -
finally會將結(jié)果和 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 對象最后狀態(tài)如何,都會執(zhí)行的操作
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
最后
評論
圖片
表情
