经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » Omi » 查看文章
一文搞懂 Promise 新 Api allSettled 的用法和 all 区别,以及如何在不支持新特性的环境下实现一个 Polyfill
来源:cnblogs  作者:骚猪佩琦  时间:2023/4/28 15:47:56  对本文有异议

开始

一文搞懂 Promise 新 Api allSettled 的用法和 all 区别,以及如何在不支持新特性的环境下实现一个 Polyfill

allSettled 的用法

  1. const runAllSettled = async () => {
  2. const successPromise = Promise.resolve('success') // 一个正常返回的 Promise
  3. const failPromise = Promise.reject('fail') // 一个异常返回的 Promise
  4. // 使用 allSettled
  5. const settiled = await Promise.allSettled([successPromise, failPromise, undefined, null])
  6. console.log(settiled)
  7. /* 输出结果如下
  8. [
  9. {status: 'fulfilled', value: 'success'},
  10. {status: 'rejected', reason: 'fail'},
  11. {status: 'fulfilled', value: undefined},
  12. {status: 'fulfilled', value: null},
  13. ]
  14. */
  15. }
  16. runAllSettled()
  • 返回一个数组,每一个元素都是一个对象,里面必然包含 status 属性
  • status 属性只会有两个值,fulfilled 或者 rejected,非黑即白的既视感
  • allSettled 总是走 then 的,也就是并发的 Promise 出现 reject 也不会走 catch,需要自行遍历返回的数组,判断 status 来做错误捕获
  • 对象中还有另外两个属性,valuereason。根据 promise 的状态返回,如果成功返回,即为 value,反之为 reason
  • 更详细的 TS 类型在这里 lib.es2020.promise.d.ts

all 的用法

  • all 的用法就不再详细赘述,可前往 MDN 查看

区别

功 能 Promise.all Promise.allSettled
并发 ? ?
并发Promise中出现 reject 是否还走 then ? ?

在不支持 Promise.allSettled 新特性的环境下实现一个 Polyfill

  1. // 通过 Promise.all 实现 Promise.allSettled
  2. if (!Promise.allSettled) {
  3. Promise.allSettled = function (promises) {
  4. return Promise.all(
  5. promises.map((p) =>
  6. Promise.resolve(p).then(
  7. (value) => ({
  8. status: "fulfilled",
  9. value,
  10. }),
  11. (reason) => ({
  12. status: "rejected",
  13. reason,
  14. })
  15. )
  16. )
  17. );
  18. };
  19. }

原文链接:https://www.cnblogs.com/PeiQi1229/p/17362393.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号