写点什么

TC39 提出了九个 JavaScript 建议,包括 Array.fromAsync、Error.isError 和 using

  • 2025-06-24
    北京
  • 本文字数:1212 字

    阅读完需:约 4 分钟

大小:409.68K时长:02:19
TC39提出了九个JavaScript建议,包括Array.fromAsync、Error.isError和using

Ecma 技术委员会 39(TC39),负责 JavaScript(ECMAScript)发展的机构,最近在其阶段流程中推进了九个提案,其中有三个新的语言特性将成为标准的一部分:Array.fromAsync、Error.isError 和显式资源管理 using

 

Array.fromAsync 是一个从异步可迭代对象创建数组的实用工具。这简化了从异步生成器或流等数据源收集数据的过程,消除了手动使用 for await...of 循环的需要。

 

特性解释器提供了以下来自httptransfer模块的实际示例:

 

async function toArray(items) {  const result = [];  for await (const item of items) {    result.push(item);  }  return result;}

it('empty-pipeline', async () => { const pipeline = new Pipeline(); const result = await toArray( pipeline.execute( [ 1, 2, 3, 4, 5 ])); assert.deepStrictEqual( result, [ 1, 2, 3, 4, 5 ], );});
复制代码

 

使用新语法,这变为:

 

it('empty-pipeline', async () => {  const pipeline = new Pipeline();  const result = await Array.fromAsync(    pipeline.execute(      [ 1, 2, 3, 4, 5 ]));  assert.deepStrictEqual(    result,    [ 1, 2, 3, 4, 5 ],  );});
复制代码

 

Error.isError() 方法也推进到第 4 阶段,提供了一种可靠的方法来检查一个值是否是错误实例。替代方案 instanceof Error 被认为是不可靠的,因为它会在跨域(例如,来自 iframe 或 node 的 vm 模块)错误实例中提供Error的否定结果。

 

另一个达到第 4 阶段的提案是显式资源管理,引入了用于管理需要显式清理的资源(如文件或网络连接)的 using 声明。这个提案特别受到资源管理不一致模式的驱动:ECMAScript 迭代器的 iterator.return() 、WHATWG 流读取器的 reader.releaseLock() 、NodeJS 文件句柄的 handle.close() 等。

 

提案还缓解了几个潜在的问题。例如,在管理多个资源时:

 

const a = ...;const b = ...;try {  ...}finally {  a.close(); // 糟糕,如果`b.c close()`依赖于`a`,就会发生问题。  b.close(); // 糟糕,如果`a.c close()`抛出异常,`b`永远不会执行。}
复制代码

 

Import Attributes (原名 Import Assertions)推进到第 3 阶段。这个特性允许开发者向import声明添加元数据,提供关于模块预期类型的信息,如 JSON 或 CSS。

 

其他在不同阶段推进的提案包括 Promise.try ,旨在简化 promise 链中的错误处理, RegExp.escape 用于在正则表达式中安全转义字符串等。开发者可以在网上的博客文章中查看完整列表

 

TC39 是发展 JavaScript 的委员会。其成员包括所有主要的浏览器供应商等。每个 ECMAScript 特性的提案都会经历以下几个成熟的阶段

 

  • 第 0 阶段:初步构想

  • 第 1 阶段:提案

  • 第 2 阶段:草案

  • 第 3 阶段:候选

  • 第 4 阶段:完成

 

一旦一个特性的提案达到第 4 阶段,它将被包含在标准中,因此可以安全使用。然而,浏览器对特性的支持可能会落后于标准中特性的采用。

 

原文链接:

https://www.infoq.com/news/2025/06/tc39-stage-4-2025/

2025-06-24 17:006300

评论

发布
暂无评论

阿里架构师花近三个月时间整理出来的Java独家面试题(Java岗)

程序员啊叶

Java 编程 程序员 架构 java面试

城市燃气安全再拉警钟,如何防患于未“燃”?

AIRIOT

物联网 天然气管理平台 燃气安全

7.依赖注入

MASA技术团队

后端

Cloud XR面临的问题以及Cloud XR主要应用场景

3DCAT实时渲染

免费的低代码开发平台有哪些?

优秀

低代码 低代码开发平台

为什么数字化未来取决于3D实时渲染

3DCAT实时渲染

实时云渲染

博云容器云、DevOps平台斩获可信云“技术最佳实践奖”

BoCloud博云

容器 DevOps 云原生 容器云

越来越成熟的Rust,都应用了哪些场景呢?

非凸科技

rust

国际权威认可!OceanBase入选Forrester Translytical数据平台报告

OceanBase 数据库

oceanbase

Go语言系列:Go从哪里来,Go将去哪里?

小黑豆豆

后端 阅读 Go 语言 7月月更

云流化和云桌面有什么关系

3DCAT实时渲染

RTC 性能自动化工具在内存优化场景下的实践

字节跳动视频云技术团队

性能优化 RTC 内存优化

关于云XR介绍,以及5G时代云化XR的发展机遇

3DCAT实时渲染

XR 云XR

柏睿数据加入阿里云PolarDB开源数据库社区

阿里云数据库开源

开源数据库 polarDB PolarDB-X 阿里云数据库 PolarDB for PostgreSQL

大型仿人机器人的技术难点和应用情况

优必选科技

机器人

8 年产品经验,我总结了这些持续高效研发实践经验 · 研发篇

尔达Erda

产品 程序员 云原生 研发 效能

喜讯!瑞云科技被授予“海上扬帆”5G融合应用专委会成员单位

3DCAT实时渲染

5G

实时云渲染有哪些优势

3DCAT实时渲染

实时云渲染

算法题每日一练---第9天:第几个幸运数字

知心宝贝

算法 前端 后端 7月月更

Rainbond插件扩展:基于Mysql-Exporter监控Mysql

北京好雨科技有限公司

云原生 #Kubernetes#

多租户软件开发架构

力软低代码开发平台

「行话」| 用DevOps高效交付游戏,是种什么体验?

极狐GitLab

git DevOps gitlab 敏捷开发 游戏开发

如何创建一个有效的帮助文档?

Geek_da0866

一周活动速递|深入浅出第8期;Meetup成都站报名进行中

OceanBase 数据库

从业务需求出发,开启IDC高效运维之路

鲸品堂

IDC

更新|3DCAT实时云渲染 v2.1.2版本全新发布

3DCAT实时渲染

3DCAT v2.1.3新版本发布,这三大功能更新你不容错过!

3DCAT实时渲染

云VR:虚拟现实专业化的下一步

3DCAT实时渲染

Cloud XR

如何选择数字孪生可视化平台

3DCAT实时渲染

数字孪生

Auditing相关注解

Damon

7月月更

TC39提出了九个JavaScript建议,包括Array.fromAsync、Error.isError和using_软件工程_Bruno Couriol_InfoQ精选文章