顶级 await 在 Node.js 模块中可用啦!

2021-11-01 15:06:44 浏览数 (1)

这篇文章是我今天学习系列的一部分,我在其中分享了我所有的 Web 开发学习。

Node.js 是一个用于编写快速实用程序脚本的漂亮工具。我在许多构建过程中都使用它。重命名文件、下载数据、图像处理——Node.js 脚本处理我项目中的许多任务。

不过,有一个小小的烦恼。在处理诸如发出网络请求之类的异步功能时,Node.js (尚) 中没有顶级 await 支持

await关键字允许您解开基于 Promises 的代码,避免链式then调用并使源代码更具可读性。

代码语言:javascript复制
// promise-based code
Promise.resolve('hello world').then((asyncMsg) => {
  console.log(msg);
});

// async/await code
const asyncMsg = await Promise.resolve('hello world');
console.log(msg);

不幸的是,如果不将await关键字包装在async函数中,就无法使用它。

代码语言:javascript复制
// use an async IIFE
(async () => {
  const asyncMsg = Promise.resolve('hello world');
  console.log(asyncMsg);
})();

// use an async main function
async function main() {
  const asyncMsg = Promise.resolve('hello world');
  console.log(asyncMsg);
}

main();

虽然将代码包装在 anasync function中并不可怕,但其全部目的是启用await关键字。有没有更好的办法?我们可以async在 Node.js 代码中避免这些包装器吗?顶级等待现在来救援!

顶级await在 Node.js 中“未标记”可用,因为v14.8

从 Node.js 开始v14.8,顶级 await 可用(不使用--harmony-top-level-await命令行标志)。

有一个问题:顶级 await 仅在 ES 模块中可用。有三种方法可以使 Node.js 脚本成为 EcmaScript 模块。

请注意,如果你在的Node.js使ES模块,你必须改变所有require,并module声明与他们importexport同行。

使用mjs文件扩展名

使用.mjs文件扩展名并收工!

0 人点赞