经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » TypeScript » 查看文章
TypeScript又出新关键字了?
来源:cnblogs  作者:chuckQu  时间:2023/6/28 8:50:11  对本文有异议

TypeScript 5.2将引入一个新的关键字:using。当它离开作用域时,你可以用Symbol.dispose函数来处置任何东西。

  1. {
  2. const getResource = () => {
  3. return {
  4. [Symbol.dispose]: () => {
  5. console.log('Hooray!')
  6. }
  7. }
  8. }
  9. using resource = getResource();
  10. } // 'Hooray!' logged to console

这是基于TC39提议,该提议最近达到了第三阶段,表明它即将进入JavaScript。

using将对管理文件句柄、数据库连接等资源非常有用。

Symbol.dispose

Symbol.dispose是JavaScript中一个新的全局symbol。任何具有分配给Symbol.dispose函数的东西都将被视为"资源":也就是具有特定生命周期的对象。并且该资源可以使用using关键字。

  1. const resource = {
  2. [Symbol.dispose]: () => {
  3. console.log("Hooray!");
  4. },
  5. };

await using

你也可以使用Symbol.asyncDisposeawait来处理那些需要异步处置的资源。

  1. const getResource = () => ({
  2. [Symbol.asyncDispose]: async () => {
  3. await someAsyncFunc();
  4. },
  5. });
  6. {
  7. await using resource = getResource();
  8. }

这将在继续之前等待Symbol.asyncDispose函数。

这对数据库连接等资源来说很有用,你要确保在程序继续前关闭连接。

使用案例

文件句柄

通过节点中的文件处理程序访问文件系统,使用using可能会容易得多。

不使用using

  1. import { open } from "node:fs/promises";
  2. let filehandle;
  3. try {
  4. filehandle = await open("thefile.txt", "r");
  5. } finally {
  6. await filehandle?.close();
  7. }

使用using

  1. import { open } from "node:fs/promises";
  2. const getFileHandle = async (path: string) => {
  3. const filehandle = await open(path, "r");
  4. return {
  5. filehandle,
  6. [Symbol.asyncDispose]: async () => {
  7. await filehandle.close();
  8. },
  9. };
  10. };
  11. {
  12. await using file = getFileHandle("thefile.txt");
  13. // Do stuff with file.filehandle
  14. } // Automatically disposed!

数据库连接

管理数据库连接是在C#中使用using的一个常见用例。

不使用using

  1. const connection = await getDb();
  2. try {
  3. // Do stuff with connection
  4. } finally {
  5. await connection.close();
  6. }

使用using

  1. const getConnection = async () => {
  2. const connection = await getDb();
  3. return {
  4. connection,
  5. [Symbol.asyncDispose]: async () => {
  6. await connection.close();
  7. },
  8. };
  9. };
  10. {
  11. await using { connection } = getConnection();
  12. // Do stuff with connection
  13. } // Automatically closed!

图片示例

下图是上面示例的图片版本:

await-using.jpg

总结

本文简要介绍了TypeScript5.2中引入的新关键字using,它的出现可以很好的和Symbol.dispose搭配使用。有了它我们便不需要在try…catch语句中进行数据库的关闭,这对管理文件句柄、数据库连接等资源时非常有用。

以上就是本文的全部内容,如果对你有所启发,欢迎点赞、收藏、转发~

原文链接:https://www.cnblogs.com/chuckQu/p/17510044.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号