站长网 系统 Promise.prototype.finally 的影响

Promise.prototype.finally 的影响

Promise.prototype.finally() 的作用 Promise.prototype.finally() 是 ES2018 新增的特性,它回一个 Promise ,在 promise 结束时,无论 Promise 运行成功还是失败,都会运行 finally ,类似于我们常用的 try {…} catch {…} finally {…} Promise.prot

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 

    }) 

  }) 

本文来自网络,不代表站长网立场,转载请注明出处:https://www.tzzz.com.cn/html/fuwuqi/xt/2021/0601/8127.html

作者: dawei

【声明】:站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。
联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部