You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么我的async异步函数会报'message标识符已声明'的SyntaxError错误

报错触发原因

该报错属于JS解析阶段就会抛出的语法错误,和async异步逻辑无关,触发原因有两点:

  • 你在demoPromise的try同一块级作用域内,使用let关键字重复声明了同名变量message。let、const关键字声明的变量有块级作用域约束,同一作用域内不允许重复声明同一个标识符,直接触发语法报错。
  • 代码中catch ((error) => {的写法不符合语法规范:catch后直接跟参数变量即可,不需要额外套括号写箭头函数格式,这也会导致语法错误。

解决方法

方案1:复用变量,取消重复声明

如果不需要保留第一次await myPromise的结果,直接给已声明的message变量重新赋值即可,同时修正catch的语法:

/* async/await */
async function demoPromise() {
    try {
        let message = await myPromise;
        // 去掉前面的let,直接赋值覆盖原有值
        message = await helloPromise();
        console.log(message);

    } catch (error) { // 去掉多余括号,直接写参数名
        console.log("Error:" + error.message);
    }
}

/* 调用异步函数 */
(async () => {
    // 注意:如果myDate函数未提前定义,此处会抛出引用错误,需补充对应函数定义
    await myDate();
})();

方案2:区分变量命名

如果需要同时保留两次异步调用的结果,给第二个变量设置不同的标识符即可:

/* async/await */
async function demoPromise() {
    try {
        let firstMessage = await myPromise;
        let secondMessage = await helloPromise();
        console.log(firstMessage, secondMessage);

    } catch (error) {
        console.log("Error:" + error.message);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:54:01