第181题: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
})
})
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: 第 182 题:实现一个异步求和函数
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
更多解析
Promise.prototype.finally()
的作用Promise.prototype.finally()
是 ES2018 新增的特性,它回一个Promise
,在promise
结束时,无论Promise
运行成功还是失败,都会运行finally
,类似于我们常用的try {...} catch {...} finally {...}
Promise.prototype.finally()
避免了同样的语句需要在then()
和catch()
中各写一次的情况reject
:注意:
finally
没有参数finally
会将结果和 error 传递手写一个
Promise.prototype.finally()
不管
Promise
对象最后状态如何,都会执行的操作原文