有了它 ,我彻底告别了 try-finally 🔥🔥🔥

前言

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

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

往期精彩推荐

正文

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

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

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

bash 复制代码
node --harmony-explicit-resource-management app.js

其核心特点如下:

  • 声明式资源管理 :通过 using 关键字定义需自动清理的资源。
  • 自动释放 :作用域结束时调用资源的 [Symbol.dispose] 方法。
  • 异步支持usingawait 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 结合了 awaitusing,确保异步资源在作用域结束时通过 [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" 声明,代码更简洁,清理逻辑自动处理,减少出错风险~

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

往期精彩推荐

相关推荐
崔庆才丨静觅13 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby606113 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了13 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅14 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅14 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅14 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment14 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅15 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊15 小时前
jwt介绍
前端
爱敲代码的小鱼15 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax