You need to enable JavaScript to run this app. NodeJS v14环境下async/await搭配try/catch使用时出现catch语法错误咨询
优惠活动
大模型
产品
解决方案
定价
更多

NodeJS v14环境下async/await搭配try/catch使用时出现catch语法错误咨询

语法错误根因

当前的报错完全来自于对try/catch原生语法的误用,和Node.js v14的版本兼容性没有关联。Node.js v14已经完整支持所有async/await、try/catch的ES语法,不存在版本过低导致语法不识别的问题。

错误点说明

JavaScript的异常捕获规则分两类,差异很大,非常容易被混淆:

  • 链式调用Promise时用的.catch()是对象方法,需要传入错误处理回调,常规写法类似.catch((err) => { ... })
  • 代码块里搭配try使用的catch是原生关键字,后面直接用圆括号声明捕获到的错误变量,之后跟花括号写错误处理逻辑,不需要写箭头函数的=>符号,也不需要把参数包成回调形式。

你现在的代码把两种语法混写在了一起,写成了catch ((error) => {,相当于把catch后面本应声明错误变量的位置,错写成了箭头函数的参数定义。JS解析器读到catch关键字后的第一个(时,预期是看到错误变量名,突然遇到后续的箭头函数语法,就会抛出“意外的标记”类语法错误,和你贴出来的报错信息完全匹配。

写法对比

  • 触发报错的错误写法:
} catch ((error) => {
    console.log("Error:" + error.message);
})
  • 符合语法规范的正确写法:
} catch (error) {
    console.log("Error:" + error.message);
}

修正后的完整参考代码

顺便补全你代码里缺失的两个Promise定义,避免修改完catch语法后出现未定义变量的引用报错:

// 补全代码中缺失的Promise定义
const myFirstPromise = Promise.resolve("来自myFirstPromise的返回值");
const helloPromise = () => Promise.resolve("来自helloPromise的返回值");

async function demoPromise() {
    try {
        let message1 = await myFirstPromise;
        let message2 = await helloPromise();
        console.log(message1, message2);
    } catch (error) {
        console.log("Error:" + error.message);
    }
}

(async () => {
    await demoPromise();
})();

内容的提问来源于stack exchange,提问作者mark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.28 04:45:04