Promise.prototype.finally 的作用,如何自己实现 Promise.prototype.finally

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

[[396754]]

本文转载自微信公众号「三分钟学前端」,作者sisterAn。转载本文请联系三分钟学前端公众号。

Promise.prototype.finally() 的作用

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

Promise.prototype.finally() 避免了同样的语句需要在 then() 和 catch() 中各写一次的情况

  1. new Promise((resolve, reject) => { 
  2.   setTimeout(() => resolve("result"), 2000) 
  3. }) 
  4.   .then(result => console.log(result)) 
  5.   .finally(() => console.log("Promise end")) 
  6.  
  7. // result 
  8. // Promise end 

reject :

  1. new Promise((resolve, reject) => { 
  2.   throw new Error("error"
  3. }) 
  4.   .catch(err => console.log(err)) 
  5.   .finally(() => console.log("Promise end")) 
  6.  
  7. // Error: error 
  8. // Promise end 

注意:

  • finally 没有参数
  • finally 会将结果和 error 传递
  1. new Promise((resolve, reject) => { 
  2.   setTimeout(() => resolve("result"), 2000) 
  3. }) 
  4.   .finally(() => console.log("Promise ready")) 
  5.   .then(result => console.log(result)) 
  6.  
  7. // Promise ready 
  8. // result 

手写一个 Promise.prototype.finally()

不管 Promise 对象最后状态如何,都会执行的操作

  1. MyPromise.prototype.finally = function (cb) { 
  2.   return this.then(function (value) { 
  3.     return MyPromise.resolve(cb()).then(function () { 
  4.       return value 
  5.     }) 
  6.   }, function (err) { 
  7.     return MyPromise.resolve(cb()).then(function () { 
  8.       throw err 
  9.     }) 
  10.   }) 

 

来自:https://github.com/sisterAn/blog

 

责任编辑:武晓燕 来源: 三分钟学前端
相关推荐

2021-03-27 10:56:17

promisethenfinally

2021-03-19 09:52:13

ES2018异步迭代开发

2021-04-28 08:21:21

Promise.any服务器场景

2021-04-27 08:31:37

Promisereject信息

2021-01-18 08:24:51

JavaScriptMicrotask微任务

2018-03-13 16:04:45

Promise执行顺序

2023-09-15 15:31:23

异步编程Promise

2020-12-15 08:01:24

Promise参数ES6

2017-05-11 20:20:59

JavascriptPromiseWeb

2020-07-29 17:35:08

Promise源码前端

2021-03-09 07:37:42

技术Promise测试

2022-09-28 12:23:36

Promise代码

2011-11-18 09:26:18

Javafinally

2012-12-24 09:45:21

2016-06-07 14:28:39

Javascript原型

2020-09-18 09:02:20

JavaScript

2020-09-24 11:46:03

Promise

2015-07-23 11:59:27

JavascriptPromise

2022-01-21 08:50:15

Promise任务队列前端

2009-07-08 17:48:18

prototype属性
点赞
收藏

51CTO技术栈公众号