web-dev-qa-db-ja.com

awaitを使用するときの予期しない識別子

現在、ループを同期する必要がある関数に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

その原因は何でしょうか?
ありがとう!

15
Ron Melkhior

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

また、とにかく非同期を使用しているので、そこにあるプロミスチェーン全体を非同期にすることができます。

47
Joseph