当前位置: 首页 > wzjs >正文

帝国 网站搬家汕头seo排名

帝国 网站搬家,汕头seo排名,制作小程序难吗,装饰网站建设的背景本文首发在我的个人博客上:Javascript的新能力:显式资源管理(Explicit Resource Management)https://www.brandhuang.com/article/1749888651434 本文不是原文翻译 英文原文地址:JavaScripts New Superpower: Explicit…

本文首发在我的个人博客上:Javascript的新能力:显式资源管理(Explicit Resource Management)https://www.brandhuang.com/article/1749888651434

本文不是原文翻译

英文原文地址:JavaScript's New Superpower: Explicit Resource Management

提案地址: https://github.com/tc39/proposal-explicit-resource-management

这是一个实验性语法提案

目前该提案处于 pending stage 4 阶段

从 Chromium v134和 V8 的 v13.8 开始提供支持。

图片描述

该提案的作用

通过一种显示方法来管理资源的生命周期,这里的资源包括:内存、I/O、文件操作(file handles)、网络连接等

提案引入的内容

  • using 和 await using
  • DisposableStack 和 AsyncDisposableStack

using / await using

用法:

using x = xxx;
await using x = xxx;

使用 using 或 await using 声明的变量,会在函数体、块或者模块结尾被处理,即作用域结束时自动触发 dispose 方法 ,

要自动触发 dispose / asyncDispose 方法的前提是要自己实现 dispose / asyncDispose 方法

提案之前的代码 VS 提案之后的代码

基础代码:

// 同步资源
class SyncResource {constructor(name) {this.name = name;console.log(`打开资源: ${name}`);}use() {console.log(`使用资源: ${this.name}`);}[Symbol.dispose]() {console.log(`释放资源: ${this.name}`);}
}// 异步资源
class AsyncResource {constructor(name) {this.name = name;}static async open(name) {console.log(`异步打开资源: ${name}`);await new Promise(r => setTimeout(r, 100));return new AsyncResource(name);}async use() {console.log(`异步使用资源: ${this.name}`);}async [Symbol.asyncDispose]() {console.log(`异步释放资源: ${this.name}`);await new Promise(r => setTimeout(r, 100));}
}
新提案之前
function withoutUsing() {const res = new SyncResource("Logger");try {res.use();} finally {res[Symbol.dispose]();}
}async function withoutAwaitUsing() {const res = await AsyncResource.open("DB");try {await res.use();} finally {await res[Symbol.asyncDispose]();}
}
提案之后

function withUsing() {using res = new SyncResource("Logger");res.use();
}
// 自动调用 res[Symbol.dispose](),即使出错也能释放

在作用域结束时自动释放资源,避免了忘记手动释放

DisposableStack / AsyncDisposableStack

  • 用于手动管理多个资源的释放顺序;
  • 遵循栈结构,注册的资源后进先出(LIFO);
  • 这两个对象提供一系列方法,比如use()adopt()defer()

使用示例:

function exampleUsingStack() {const stack = new DisposableStack();const file = {name: "log.txt",[Symbol.dispose]() {console.log(`关闭文件 ${this.name}`);}};const db = {name: "local.db",[Symbol.dispose]() {console.log(`关闭数据库 ${this.name}`);}};stack.use(file); // 注册 file 的释放stack.use(db);   // 注册 db 的释放stack.dispose(); // 自动依序调用 db → file 的释放逻辑
}
exampleUsingStack()
async function exampleAsyncStack() {const stack = new AsyncDisposableStack();const conn = {name: "async-db",async [Symbol.asyncDispose]() {console.log(`关闭异步连接 ${this.name}`);}};const tmpFile = {name: "temp.txt",async [Symbol.asyncDispose]() {console.log(`删除临时文件 ${this.name}`);}};stack.use(conn);stack.use(tmpFile);await stack.dispose(); // 顺序释放资源(tmpFile → conn)
}await exampleAsyncStack();

感谢你的阅读

http://www.dtcms.com/wzjs/574609.html

相关文章:

  • 无锡网络公司网站建设重庆妇科医院排行
  • wordpress采集自动伪原创镇江网站优化seo
  • 毕业设计做网站论文建设通官网登录入口
  • 免费微网站有哪些国外最新十大新闻
  • 企业网站搭建方案贵州茅台酒股份有限公司网站
  • 重庆巫溪网站建设百度提问
  • 标准网站建设多少钱郴州有什么好玩的地方
  • 微信企业邮箱怎么注册网站优化怎样做
  • 潍坊门户网站建设wordpress php转html代码
  • 长沙哪家网站设计好WordPress自定义密码的插件
  • shopex网站首页空白镇江网站制作服务
  • 东昌府区网站建设公司怎么进入网络管理系统
  • 网络营销的工作岗位搜索自定义关键词优化
  • 顶呱呱网站建设是外包的吗建筑三维建模
  • 寻找做网站的网站案例展示
  • 网站如何做电脑和手机伊春网络推广
  • 新吴网站建设域名注册阿里
  • 网站建设应该注意的问题鞍钢贴吧
  • 360度全景网站的公司在线简历制作
  • 制作网站案例网址查logo的网站
  • 如何做全景网站网站建设对接模版
  • 杭州公司网站开发做demo的网站
  • 外贸鞋的网站建设做h5页面的网站哪个好
  • 重庆帝一网络网站建设专家网站开发前台后台怎么交互
  • 响应式网站常用宽度小白如何搭建一个网站
  • seo网站优化培训怎么做自己创建平台型网站
  • 青海休闲网站建设公司网站制作流程是什么
  • 网站建设的搜索栏怎么设置上海定制建设网站
  • 还有做网站的必要吗网页制作教程ps
  • 网站不支持下载的视频怎么下载网络应用开发