2017-02-27 16 views
10
Bu kod ile derleme zamanı hatası alıyorum

:Async/bekliyoruz Dizisi # haritası() içindeki

const someFunction = async (myArray) => { 
    return myArray.map(myValue => { 
     return { 
      id: "my_id", 
      myValue: await service.getByValue(myValue); 
     } 
    }); 
}; 

Hata iletisi:

await is a reserved word

Neden böyle kullanamazsınız ?

Ben de başka bir yol denedik ama bana aynı hata veriyor:

const someFunction = async (myArray) => { 
    return myArray.map(myValue => { 
     const myNewValue = await service.getByValue(myValue); 
     return { 
      id: "my_id", 
      myValue: myNewValue 
     } 
    }); 
}; 
+1

Async ok işlevlerine sahip olabileceğinizi sanmıyorum. – Pointy

+0

İlgili https://github.com/tc39/ecmascript-asyncawait/issues/7 –

+1

Bağlantılı github tartışmasını özetlemek gerekirse, bunu geri çağırma olarak ilettiğiniz anonim işlev "eşzamansız" olmadığı için yapamazsınız ve iç “bekler” dış fonksiyonu etkilemez. –

cevap

20

:

Güncelleme: biz üst düzey bir gün bekliyor alabilirsiniz.

Yapılması gereken en önemli şey, işlevin map'a eşzamansız olarak iletilmesidir. Bu, map'un bir dizi söz vereceği anlamına gelir. Tüm sözler geri geldiğinde sonucu elde etmek için Promise.all'u kullanabiliriz. Promise.all'un kendisi bir söz verirse, dış işlevin async olması gerekmez.

const someFunction = (myArray) => { 
    const promises = myArray.map(async (myValue) => { 
     return { 
      id: "my_id", 
      myValue: await service.getByValue(myValue) 
     } 
    }); 
    return Promise.all(promises); 
} 
+0

Bu durumda söz dizisi dizide izin vermek için klasik değil daha yavaş değil? – stackdave

+0

@stackdave Muhtemelen, ama fark bir servis çağrısı içerebilir iyi "service.getByValue" yanında önemsiz olacak ... – lonesomeday

+0

Teşekkürler, kullanmaya başladım, her neyse, okunabilirlik hızdan daha iyidir, çünkü ES6 async tekniklerinin çoğu her zaman daha yavaş olacaktır, ama kimin umurunda – stackdave

4

ben map işlevi zaman uyumsuz olmadığından bu da sahip olamaz yani öyle de bekliyor, inanmak dönüş beyanı. Bu değişiklikle derler:

const someFunction = async (myArray) => { 
    return myArray.map(async (myValue) => { // <-- note the `async` on this line 
     return { 
      id: "my_id", 
      myValue: await service.getByValue(myValue) 
     } 
    }); 
}; 

Try it out in Babel REPL

Peki ... bu uygulamanızın kalanını görerek, ancak bunu için çalışıyoruz ne bağlı olmadan tavsiye vermek, ya yapmak mümkün değildir Eşzamansız fonksiyon veya bu blok için farklı bir mimari ile gelmeye çalışın. bir async işlevi içinde doğrudan değilse await kullanamazsınız, çünkü hayal gibi bunu yapamaz https://github.com/MylesBorins/proposal-top-level-await

+0

teşekkürler, ama kodunuz boş nesnelerle (yani, [[}} {}] ') döner. Sanırım bir yere 'beklemeyi' eklemem gerekiyor, ama nerede olduğunu fark edemedim – MyTitle

+0

'service.getByValue' işlevi neye benziyor? – helb

+0

sadece ES6 Promise – MyTitle