TypeScript 5.2将引入一个新的关键字:using
。当它来到作用域时,你能够用Symbol.dispose
函数来处理任何货色。
{ const getResource = () => { return { [Symbol.dispose]: () => { console.log('Hooray!') } } } using resource = getResource();} // 'Hooray!' logged to console
这是基于TC39提议,该提议最近达到了第三阶段,表明它行将进入JavaScript。
using
将对管理文件句柄、数据库连贯等资源十分有用。
Symbol.dispose
Symbol.dispose
是JavaScript中一个新的全局symbol
。任何具备调配给Symbol.dispose
函数的货色都将被视为"资源":也就是具备特定生命周期的对象。并且该资源能够应用using
关键字。
const resource = { [Symbol.dispose]: () => { console.log("Hooray!"); },};
await using
你也能够应用Symbol.asyncDispose
和await
来解决那些须要异步处理的资源。
const getResource = () => ({ [Symbol.asyncDispose]: async () => { await someAsyncFunc(); },});{ await using resource = getResource();}
这将在持续之前期待Symbol.asyncDispose
函数。
这对数据库连贯等资源来说很有用,你要确保在程序持续前敞开连贯。
应用案例
文件句柄
通过节点中的文件处理程序拜访文件系统,应用using
可能会容易得多。
不应用using
:
import { open } from "node:fs/promises";let filehandle;try { filehandle = await open("thefile.txt", "r");} finally { await filehandle?.close();}
应用using
:
import { open } from "node:fs/promises";const getFileHandle = async (path: string) => { const filehandle = await open(path, "r"); return { filehandle, [Symbol.asyncDispose]: async () => { await filehandle.close(); }, };};{ await using file = getFileHandle("thefile.txt"); // Do stuff with file.filehandle} // Automatically disposed!
数据库连贯
治理数据库连贯是在C#中应用using
的一个常见用例。
不应用using
:
const connection = await getDb();try { // Do stuff with connection} finally { await connection.close();}
应用using
:
const getConnection = async () => { const connection = await getDb(); return { connection, [Symbol.asyncDispose]: async () => { await connection.close(); }, };};{ await using { connection } = getConnection(); // Do stuff with connection} // Automatically closed!
图片示例
下图是下面示例的图片版本:
总结
本文简要介绍了TypeScript5.2中引入的新关键字using
,它的呈现能够很好的和Symbol.dispose
搭配应用。有了它咱们便不须要在try…catch
语句中进行数据库的敞开,这对管理文件句柄、数据库连贯等资源时十分有用。
以上就是本文的全部内容,如果对你有所启发,欢送点赞、珍藏、转发~