Javascript 使用wait时出现意外标识符

Javascript 使用wait时出现意外标识符,javascript,node.js,async-await,es6-promise,ecmascript-2017,Javascript,Node.js,Async Await,Es6 Promise,Ecmascript 2017,我目前正在尝试使用async/await来实现一个要求循环同步的函数 这就是功能: async channelList(resolve, reject) { let query = ['channellist'].join(' '); this.query.exec(query) .then(response => { let channelsRaw = response[0].split('|'); let channels =

我目前正在尝试使用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));
}
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);
});
当我尝试运行它时,会出现以下错误:

let channel = await method.run(dataParsed.cid);
                    ^^^^^^
SyntaxError: Unexpected identifier
原因可能是什么?

谢谢

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

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));
}
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);
});

另外,由于您使用的是异步,因此您可以将整个承诺链异步化。

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