这篇文章是我今天学习系列的一部分,我在其中分享了我所有的 Web 开发学习。
Node.js 是一个用于编写快速实用程序脚本的漂亮工具。我在许多构建过程中都使用它。重命名文件、下载数据、图像处理——Node.js 脚本处理我项目中的许多任务。
不过,有一个小小的烦恼。在处理诸如发出网络请求之类的异步功能时,Node.js (尚) 中没有顶级 await 支持。
该await
关键字允许您解开基于 Promises 的代码,避免链式then
调用并使源代码更具可读性。
// 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
函数中,就无法使用它。
// 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
声明与他们import
和export
同行。
使用mjs
文件扩展名
使用.mjs
文件扩展名并收工!