2017-04-07 51 views
7

Obecnie próbuję użyć async/await dla funkcji, która wymaga synchronizacji pętli.Nieoczekiwany identyfikator podczas oczekiwania na czekanie

Jest to funkcja:

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

Kiedy próbuję go uruchomić, dostaję ten błąd:

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

Co może być przyczyną tego?
Dzięki!

Odpowiedz

30

Twój async jest zdefiniowany na channelList, a nie na funkcji strzałki, w której znajduje się await. Przenieś async do tej funkcji strzałką:

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

Ponadto, ponieważ używasz asynchronicznych tak czy inaczej, można po prostu asynchroniczny całego łańcucha obietnicy tam masz.

+1

Czuję się teraz tak głupio, nie zdawałem sobie sprawy, że był w callbacku. Dzięki :) –