本文共 1228 字,大约阅读时间需要 4 分钟。
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 }) })}
本文首发自「三分钟学前端」,回复「交流」自动加入前端三分钟进阶群,每日一道编程算法面试题(含解答),助力你成为更优秀的前端开发!
转载地址:http://yjbsi.baihongyu.com/