迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Node.js >

如何解决 Node.js 中 SyntaxError:await is only valid in async functions and the top level bodie

作者:迹忆客 最近更新:2023/01/08 浏览次数:

当在未标记为异步的函数内部使用 await 关键字时,会出现错误“await is only valid in async functions and the top level bodies of modules”。 要解决该错误,需要将直接封闭的函数标记为异步。

下面是发生错误的一段代码示例。

// Cause: Function not marked as async
function getNum() {
  // Error: SyntaxError: await is only valid
  // in async functions and the top level bodies of modules
  const num = await Promise.resolve(100);

  return num;
}

// Cause: Using top level await without setting
// `type` to `module` in `package.json`
const result = await Promise.resolve(42);

运行上面代码会产生我们本次要介绍的错误。

nodejs await 错误

错误的第一个原因是 - 在未声明为异步的函数中使用 await 关键字。

为了解决这个问题,我们必须将直接封闭的函数标记为异步。

// 现在标记为异步
async function getNum() {
  const num = await Promise.resolve(100);

  return num;
}

如果当前在使用顶级 await 时遇到错误,需要查看本文下面的 package.json 部分。

该错误的一个非常常见的原因是忘记将内部函数设置为异步,例如 我们传递给 forEach()、map() 等方法的那些。

注意 ,使用 await 关键字的直接封闭函数必须标记为异步。

async function loopNums() {
  const nums = [3, 5, 7];

  nums.forEach(num => {
    // SyntaxError: await is only valid
    // in async functions and the top level bodies of modules
    await Promise.resolve(num);
  });
}

我们将 loopNums 函数标记为异步,但我们在传递给 forEach() 方法的函数内部使用了 await 关键字。

相反,我们应该将传递给 forEach 的函数标记为异步。

function loopNums() {
  const nums = [3, 5, 7];

  nums.forEach(async num => {
    await Promise.resolve(num);
  });
}

现在,我们传递给 forEach 方法的函数是异步的,所以我们可以在其中使用 await 关键字。

必须将直接封闭的函数标记为 async 以便我们能够使用 await 关键字。

如果我们尝试在 Node.js 应用程序的顶层使用 await 关键字,请确保在 package.json 文件中将 type 属性设置为 module。

如果没有 package.json 文件,可以使用 npm init -y 命令创建一个。

打开项目根目录下的 package.json 文件,并将 type 属性设置为 module。

{
  "type": "module",
  // ... your other settings
}

现在我们可以在 Node.js 代码中使用顶级 await。

const result = await Promise.resolve(42);

console.log(result); // 42

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 Node.js 中编码 URL

发布时间:2023/03/27 浏览次数:201 分类:Node.js

在这篇简短的文章中,我们将学习如何在 Node.js 中进行 URL 编码。

在 Node.js 中编码 Base64

发布时间:2023/03/27 浏览次数:155 分类:Node.js

在本文中,我们将学习如何在 Node.js 中将字符串或文本转换为 base64。

Node.js 与 React JS 的比较

发布时间:2023/03/27 浏览次数:137 分类:Node.js

本文比较和对比了两种编程语言,Node.js 和 React。React 和 Node.js 都是开源 JavaScript 库的示例。 这些库用于构建用户界面和服务器端应用程序。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便