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
相关产品推荐
相关产品推荐

