在 Node.js 开发中,经常需要处理异步操作,比如网络请求、文件读写等。JavaScript 提供了 async/await 语法来简化异步代码的编写。但是,Node.js 并没有像其他语言那样提供 async main 方法,这就需要使用一些技巧来实现顶层的异步函数。本文将介绍如何在 Node.js 脚本中使用异步函数和立即调用函数表达式(IIFE)。
首先,来看一个常见的错误。假设有以下代码:
async function doSomethingAsync() {
return Promise.resolve('Hello, World!');
}
const response = await doSomethingAsync();
console.log(response);
当尝试运行这段代码时,会得到一个错误提示:SyntaxError: await is only valid in async function。这是因为在非异步函数中使用了 await 关键字。
为了解决这个问题,可以利用 IIFE(Immediately Invoked Function Expression)。IIFE 是一种在定义后立即执行的函数表达式。可以将异步函数包装在 IIFE 中,这样就可以在顶层代码中使用 await 了。以下是修改后的代码:
async function doSomethingAsync() {
return Promise.resolve('Hello, World!');
}
(async function() {
const response = await doSomethingAsync();
console.log(response);
})();
现在,当运行这段代码时,会输出 "Hello, World!"。