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

今天我们来看看 using
的神奇用法!
往期精彩推荐
- Node.js v24.6.0 新功能速览
- 原来在字节写代码就是这么朴实无华!
- Webpack 项目也可以引入大模型问答了!感谢 Rsdoctor 1.2 !
- 更多精彩文章欢迎关注我的公众号:萌萌哒草头将军
正文
using
声明是 ECMAScript 提案中的一项新特性,旨在简化资源管理!
Node.js 从 v20 开始实验性支持此功能。
大家可以通过以下命令在 Node.js 中启用实验性支持:
bash
node --harmony-explicit-resource-management app.js
其核心特点如下:
- 声明式资源管理 :通过
using
关键字定义需自动清理的资源。 - 自动释放 :作用域结束时调用资源的
[Symbol.dispose]
方法。 - 异步支持 :
using
和await using
分别支持同步和异步资源。
下面是基础使用示例,带大家感受它的简洁之处!
1. 同步资源管理:using
声明
传统资源读取会依赖 try-finally 块,代码冗长且易出错:
javascript
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
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
结合了 await
和 using
,确保异步资源在作用域结束时通过 [Symbol.asyncDispose]
清理。
javascript
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
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" 声明,代码更简洁,清理逻辑自动处理,减少出错风险~
今天的分享就这些了,感谢大家的阅读!如果文章中存在错误的地方欢迎指正!
往期精彩推荐
- Node.js v24.6.0 新功能速览
- 原来在字节写代码就是这么朴实无华!
- Webpack 项目也可以引入大模型问答了!感谢 Rsdoctor 1.2 !
- 更多精彩文章欢迎关注我的公众号:萌萌哒草头将军