首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >有了它,我放弃了 try-finally 代码块!

有了它,我放弃了 try-finally 代码块!

作者头像
萌萌哒草头将军
发布2025-09-15 14:25:25
发布2025-09-15 14:25:25
7900
代码可运行
举报
文章被收录于专栏:前端框架前端框架
运行总次数:0
代码可运行

前言

前几天看到 Rspack 团队宣布即将支持 using 声明,

rspack 1.5 将支持
rspack 1.5 将支持

rspack 1.5 将支持

今天我们来看看 using 的神奇用法!

往期精彩推荐

正文

“using” 声明是 ECMAScript 提案中的一项新特性,旨在简化资源管理!

Node.js 从 v20 开始实验性支持此功能。

大家可以通过以下命令在 Node.js 中启用实验性支持:

代码语言:javascript
代码运行次数:0
运行
复制
node --harmony-explicit-resource-management app.js

其核心特点如下:

  • 声明式资源管理:通过 using 关键字定义需自动清理的资源。
  • 自动释放:作用域结束时调用资源的 [Symbol.dispose] 方法。
  • 异步支持usingawait using 分别支持同步和异步资源。

下面是基础使用示例,带大家感受它的简洁之处!

1. 同步资源管理:using 声明

传统资源读取会依赖 try-finally 块,代码冗长且易出错:

代码语言:javascript
代码运行次数:0
运行
复制
import { open } from 'fs/promises';

async function readFile() {
  const file = await open('data.txt', 'r');
  try {
    const content = await file.readFile('utf8');
    console.log(content);
  } finally {
    await file.close();
  }
}

“using” 声明适用于需要手动管理生命周期的资源,如文件句柄或数据库连接。

代码语言:javascript
代码运行次数:0
运行
复制
import { open } from 'fs/promises';

{
  using file = await open('data.txt', 'r');
  const content = await file.readFile('utf8');
  console.log(content);
}

file 自动关闭,无需显式调用 file.close()

这比传统的 try-finally 更简洁,减少了样板代码。

2. 异步资源管理:await using

对于异步资源(如数据库连接或网络请求),await using 结合了 awaitusing,确保异步资源在作用域结束时通过 [Symbol.asyncDispose] 清理。

代码语言:javascript
代码运行次数:0
运行
复制
import { createConnection } from 'some-db-driver';

async function queryData() {
  await using db = await createConnection('mysql://localhost');
  const result = await db.query('SELECT * FROM users');
  return result;
} 

这里,db 在作用域结束时调用 [Symbol.asyncDispose],自动关闭数据库连接,避免资源泄漏。

3. 自定义资源管理

开发者可以为自定义对象实现 [Symbol.dispose][Symbol.asyncDispose],以支持 “using” 声明。

代码语言:javascript
代码运行次数:0
运行
复制
class TempResource {
  constructor(name) {
    this.name = name;
  }
  [Symbol.dispose]() {
    console.log(`${this.name} disposed`);
  }
}

{
  using resource = new TempResource('temp');
  console.log('Using resource:', resource.name);
}

这种灵活性让 “using” 声明适用于各种场景,从内存管理到外部资源清理。

最后

使用 “using” 声明,代码更简洁,清理逻辑自动处理,减少出错风险~

今天的分享就这些了,感谢大家的阅读!如果文章中存在错误的地方欢迎指正!

往期精彩推荐
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-08-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 萌萌哒草头将军 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 往期精彩推荐
  • 正文
    • 1. 同步资源管理:using 声明
    • 2. 异步资源管理:await using
    • 3. 自定义资源管理
  • 最后
    • 往期精彩推荐
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档