使用 await 时出现意外的标识符

Posted

技术标签:

【中文标题】使用 await 时出现意外的标识符【英文标题】:Unexpected identifier when using await 【发布时间】:2017-09-03 10:55:51 【问题描述】:

我目前正在尝试将 async/await 用于需要循环同步的函数。

这是函数:

async channelList(resolve, reject) 
    let query = ['channellist'].join(' ');

    this.query.exec(query)
    .then(response => 
        let channelsRaw = response[0].split('|');
        let channels = [];

        channelsRaw.forEach(data => 
            let dataParsed = ResponseParser.parseLine(data);

            let method = new ChannelInfoMethod(this.query);
            let channel = await method.run(dataParsed.cid);

            channels.push(channel);
        );

        resolve(channels);
    )
    .catch(error => reject(error));

当我尝试运行它时,我得到了这个错误:

let channel = await method.run(dataParsed.cid);
                    ^^^^^^
SyntaxError: Unexpected identifier

可能是什么原因造成的? 谢谢!

【问题讨论】:

【参考方案1】:

您的async 是在channelList 上定义的,而不是在包含await 的箭头函数上。将 async 移动到该箭头函数:

channelsRaw.forEach(async (data) => 
    let dataParsed = ResponseParser.parseLine(data);

    let method = new ChannelInfoMethod(this.query);
    let channel = await method.run(dataParsed.cid);

    channels.push(channel);
);

此外,由于您无论如何都在使用 async,因此您可以只异步您那里的整个 Promise 链。

【讨论】:

我现在觉得很傻,没想到是在回调中。谢谢:) 我犯了同样的错误,我没想到匿名函数实际上就是函数!

以上是关于使用 await 时出现意外的标识符的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的语法错误:在 JS 文件中导入 JavaScript 时出现意外标识符

运行conf.js文件时出现意外的标识符错误

java意外的标记怎么解决

尝试在 Java 中使用静态变量时出现标识符异常

XCode 使用未声明的标识符,仅在打开文件时出现

将 Core Data 添加到现有 Xcode 项目时出现未声明的标识符错误