【问题标题】:Unexpected identifier when using await使用 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

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

【问题讨论】:

    标签: javascript node.js async-await es6-promise ecmascript-2017


    【解决方案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 链。

    【讨论】:

    • 我现在觉得很傻,没想到是在回调中。谢谢:)
    • 我犯了同样的错误,我没想到匿名函数实际上就是函数!
    猜你喜欢
    • 2018-03-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    相关资源
    最近更新 更多