【问题标题】:Async functions not being recognized无法识别异步函数
【发布时间】:2022-01-12 19:10:16
【问题描述】:

我有一些在多个项目中使用过的异步函数,但是当我将它们添加到另一个项目时,它们突然不起作用。

这些功能之一的示例是:

const ddbGet = async (params) => {
    try {
        const data = await docClient.get(params).promise();
        return data;
    } catch (err) {
        console.log("Failure", err.message);
        return false;
    }
};

抛出的错误是:

const ddbGet = async (params) => {

                     ^

SyntaxError: Unexpected token (

但是我知道函数的语法没有问题,因为它们已在其他地方成功使用。

我已经看到了一些其他问题的答案,这些答案表明 JSHint 和 ESLint 存在一些问题,但是我不相信我正在使用其中任何一个,但只是为了确保我安装了 ESLint 并按照那些建议指定了 ECMA 版本答案,这个错误仍然被抛出。

我还确保我使用的是最新版本的 Node.js。

如果我删除这些函数,则会由于 node_modules 文件夹中的异步函数而引发错误。

async handshake(transportName, req, closeConnection) {

   `^^^^^^^^^`

语法错误:意外的标识符

有人知道问题出在哪里吗?谢谢。

【问题讨论】:

  • node -v 告诉你什么?您的问题显然是由于某种原因您的 JavaScript 平台已经过时了。
  • 什么是抛出错误?浏览器?构建?
  • 示例代码在eslint中没有抛出任何错误
  • @Pointy v17.2.0,我在第一次抛出错误时安装了最新版本,希望它能解决它!可惜没有
  • 如果您使用的是 IDE(例如 WebStorm,我只知道它),请确保配置没有在 .idea 中混淆。您很可能为一个项目使用旧的 NodeJS 解释器,而为另一个项目使用最新的解释器。如果您通过上述 IDE 运行脚本,请务必重新进行配置。编辑:OP 的最后评论使我的评论毫无用处,但保留给可能遇到此问题的其他人。

标签: javascript node.js function asynchronous async-await


【解决方案1】:

由于文档,或者更确切地说 AWS Cloud9 的 Getting Started 没有保持最新(使用旧脚本安装 NVM)并且看到该项目非常旧(根据问题的扩展评论部分),它肯定是 NodeJS 版本。

OP 给我们的nvm ls 输出证实了这一点(我只对其进行了格式化):

v6.15.1
-> v17.2.0 system
default -> 6 (-> v6.15.1)
node -> stable (-> v17.2.0) (default)
stable -> 17.2 (-> v17.2.0) (default)
iojs -> N/A (default)
lts/* -> lts/argon (-> N/A) 
lts/argon -> v4.9.1 (-> N/A) 
lts/boron -> v6.17.1 (-> N/A) 
lts/carbon -> v8.17.0 (-> N/A) 
lts/dubnium -> v10.24.1 (-> N/A) 
lts/erbium -> v12.22.9 (-> N/A) 
lts/fermium -> v14.18.3 (-> N/A) 
lts/gallium -> v16.13.2 (-> N/A)

default -> 6 (-> v6.15.1) 行告诉我们,使用的默认 NodeJS 版本(用于整个系统)是v6.15.1

不幸的是,NodeJS v7.6 之前原生处理 async/await 语法。

您可以运行nvm install 17.2.0,然后运行nvm use 17.2.0(或者只是nvm use 部分,但我不知道我们在输出中看到的v17.2.0 是否已通过NVM 有效安装),这很可能来解决这个特殊的问题。

【讨论】:

  • 谢谢你的回答,我明天早上回办公室试试这个:)
  • 当然,让我更新!
  • 这是nvm use 17.2.0 命令之后的输出:Now using node v17.2.0 (npm v8.3.0)
  • 在您的指导下我找到了解决方案,现在发布它
【解决方案2】:

在 Gaëtan Boyals 让我走上正确的道路后,我通过更多研究找到了解决方案!

他是正确的,Node.js 的默认版本是问题所在,解决此问题的解决方案是 nvm alias default 17.2.0

【讨论】:

  • 太棒了!很高兴我至少能帮上忙!
  • @GaëtanBoyals 是的,谢谢!我会赞成你的回答,因为它对我仍然有帮助:)
猜你喜欢
  • 2019-04-11
  • 1970-01-01
  • 2013-08-16
  • 1970-01-01
  • 1970-01-01
  • 2021-02-21
  • 1970-01-01
  • 2011-07-10
  • 2017-06-04
相关资源
最近更新 更多