Promise 新 API 来袭:效率提升 300%!开发者必备神器!

哈喽,大家好 我是 xy👨🏻‍💻。今天给大家分享一个 Promise 新出了个方法:Promise.withResolvers()

在程序开发的世界里,异步无处不在!!!

在前端开发过程中,如果遇到需要等待一次请求成功之后再去执行之后的操作等其它异步场景。

最原始的解决方式通常是使用 callback 回调函数来解决,但是 callback 带来的问题就是可能会出现无限的回调地狱问题。

Promise 的出现,正是解决了回调地狱的问题,还为 async await 的出现做了垫脚石。

提出问题

大家每次在写 Promise 的时候,大家是否会发现还是需要手写回调函数,并且想要把 resolve 传出来还需要在外面定义好一个变量,然后再到回调函数中去赋值:

js 复制代码
let resolve, reject;
const promise = new Promise((res, rej) => {
  // 还是回调函数
  resolve = res;
  reject = rej;
});

resolve(data);
reject(error);

在没有 Promise.withResolvers() 之前,基本上都是以上写法!!!

解决问题

Promise.withResolvers() 方法返回一个对象,其包含一个新的 Promise 对象和两个函数 resolve 和 reject,对应于传入给 Promise() 构造函数执行器的两个参数。

使用 Promise.withResolvers() 优化后的代码:

js 复制代码
const { promise, resolve, reject } = Promise.withResolvers();

resolve(data);
reject(error);

很明显的发现,当我们单独使用 resolve 和 reject 时,用上 Promise.withResolvers() ,不需要再定义一个多余的变量去存储。

使用 Promise.withResolvers() 关键的区别在于 resolvereject 函数与 Promise 本身处于同一作用域,而不是在执行器中被创建和一次性使用。这可能使得一些更高级的用例成为可能,

例如在重复事件中重用它们,特别是在处理流和队列时。这通常也意味着相比在执行器内包装大量逻辑,嵌套会更少。

js 复制代码
async function* readableToAsyncIterable(stream) {
  let { promise, resolve, reject } = Promise.withResolvers();
  stream.on("error", (error) => reject(error));
  stream.on("end", () => resolve());
  stream.on("readable", () => resolve());

  while (stream.readable) {
    await promise;
    let chunk;
    while ((chunk = stream.read())) {
      yield chunk;
    }
    ({ promise, resolve, reject } = Promise.withResolvers());
  }
}

兼容性

目前 MDN 给出的兼容兼容性是:谷歌需要 119 及以上的版本才能使用这个方法。

参考连接:

写在最后

公众号前端开发爱好者 专注分享 web 前端相关技术文章视频教程资源、热点资讯等,如果喜欢我的分享,给 🐟🐟 点一个 👍 或者 ➕关注 都是对我最大的支持。

欢迎长按图片加好友,我会第一时间和你分享前端行业趋势面试资源学习途径等等。

欢迎加我好友,我会第一时间和你分享前端行业趋势面试资源学习途径等等。

WX: xuxuxu_yyy

关注公众号后,在首页:

  • 回复 面试题,获取最新大厂面试资料。
  • 回复简历,获取 3200 套 简历模板。
  • 回复React实战,获取 React 最新实战教程。
  • 回复Vue实战,获取 Vue 最新实战教程。
  • 回复ts,获取 TypeScript 精讲课程。
  • 回复vite,获取 Vite 精讲课程。
  • 回复uniapp,获取 uniapp 精讲课程。
  • 回复js书籍,获取 js 进阶 必看书籍。
  • 回复Node,获取 Nodejs+koa2 实战教程。
  • 回复数据结构算法,获取数据结构算法教程。
  • 回复架构师,获取 架构师学习资源教程。
  • 更多教程资源应有尽有,欢迎关注获取
相关推荐
Anita_Sun几秒前
Lodash 源码解读与原理分析 - Lodash 静态方法与原型方法
前端
明月_清风2 分钟前
Async/Await:让异步像同步一样简单
前端·javascript
听风说图2 分钟前
从 JavaScript 到 WGSL:用渐变渲染理解 GPU 编程思维
前端
float_六七3 分钟前
CSS行内盒子:30字掌握核心特性
前端·css
倔强的钧仔4 分钟前
拒绝废话!前端开发中最常用的 10 个 ES6 特性(附极简代码)
前端·javascript·面试
0和1的舞者5 分钟前
力扣hot100-链表专题-刷题笔记(一)
数据结构·链表·面试·刷题·知识
喔烨鸭6 分钟前
vue3中使用原生表格展示数据
前端·javascript·vue.js
软件开发技术深度爱好者9 分钟前
JavaScript的p5.js库坐标系图解
开发语言·前端·javascript
xlp666hub9 分钟前
Linux 设备模型学习笔记(2)之 kobject
linux·面试
如果你好18 分钟前
JavaScript 对象属性遍历Object.entries Object.keys:6 种常用方法详解与对比
javascript