es15版本新特新介绍
本文最后更新于 2025年1月26日 凌晨
前言
ECMA-262是定义ECMAScript语言的标准。每个版本的规范都在其网站上有对应的PDF文件可供下载或在线阅读。本教程内容
来源与该网站与MDN
MDN,ECMA-262
简介
以下内容摘自ECMA-262对es2024(es15)更新内容的简介
ECMAScript 2024, the 15th edition, added facilities for resizing and transferring ArrayBuffers and SharedArrayBuffers; added a new RegExp /v flag for creating RegExps with more advanced features for working with sets of strings;
and introduced the Promise.withResolvers convenience method for constructing Promises, the Object.groupBy and Map.groupBy methods for aggregating data, the Atomics.waitAsync method for asynchronously waiting for a change to shared memory,
and the String.prototype.isWellFormed and String.prototype.toWellFormed methods for checking and ensuring that strings contain only well-formed Unicode.
Object.groupBy 与 Map.groupBy
Object.groupBy
根据提供的回调函数返回的字符串值对给定可迭代对象中的元素进行分组,
语法:
1 | |
使用案例:
案例一:(groupBy根据条件分组)对数据进行过滤分组,常见场景:在一个数组中,需要过滤出我们不需要的数组,一般用数组的filter方法可以搞定,但有时候,我们又需要保留被过滤的部分,
进行分组处理,一般处理用reduce方法 进行遍历分组,Object.groupBy的出现,简化了这一过程:
1 | |
案例二:(groupBy根据属性的值对元素进行分组)
后端在返回用户数据时 是以单个用户为维度,将用户信息传给前端,前端可以需求 对用户进行分类,例如 根据用户的部门分类,根据用户的 职位分类等,
之前一般按照reduce 可以进行分类,groupBy出现后,分类只需要一行代码:
1 | |
可以看出 使用 groupBy 后,代码非常简洁。
Promise.withResolvers 介绍
简介
其出现的作用与目的: 摘自MDN 描述
使用 Promise.withResolvers() 关键的区别在于resolve与和reject函数现在与 Promise 本身处于同一作用域,而不是在执行器中被创建和一次性使用。
这可能使得一些更高级的用例成为可能,例如在重复事件中重用它们,特别是在处理流和队列时。这通常也意味着相比在执行器内包装大量逻辑,嵌套会更少。
该方法返回一个对象,其中包含一个新的Promise对象与其对应的 resolve与 reject:
1 | |
上面这种将resolve, reject与promise 放置在同一作用域的写法,出现在很多知名js框架/库中,该提案的作者列举了一些例子:
| Library | Example |
|---|---|
| React | inline example |
| Vue | inline example |
| Axios | inline example |
| TypeScript | utility |
| Vite | inline example |
| Deno stdlib | utility |
该方法在实际业务中使用很少,一般用于处理处理流和队列相关。
一下例子是实现一个单元素队列,只允许同时存在一个元素。这个队列是基于Promise设计的,特别适用于那些需要处理单个异步任务排队和传递结果的场景:
1 | |
深入剖析Promise.withResolver –>译文原文 译文原文