2016-11-03 17 views
13

używam [email protected] i chcę skompilować mojego kodu es5, ale za każdym razem używam async lub await Hasła błędy kompilatora z tej wiadomości:maszynopis: nie można znaleźć nazwy asynchronicznie/czekają

Cannot find name 'await'. 

Oto moje biblioteki: dom, es2015, es2016, es2017.

przykładem Kod:

let asyncFn =() => { 
    return new Promise((resolve:Function)=>{resolve(2)}) 
} 
// should log `2` 
console.log(await asyncFn()) 

Takie rzeczy są możliwe nawet przy [email protected], próbowałem, ale jakoś nie mogę skompilować mój kod tak.

+0

Proszę zaksięgować swój kod. Czy twoja funkcja jest oznaczona 'async'? –

+0

nie, nie jest, ale nie muszę oznaczać mojego zakresu jako "asynchroniczny", prawda? afaik to tylko cukier syntetyczny dla 'Promise' – Roomy

+2

[Przeczytaj dokumentację] (https://www.typescriptlang.org/docs/release-notes/typescript-1.7.html):" Funkcje asynchroniczne są poprzedzone słowem asynchronicznym " – Amy

Odpowiedz

18

Musisz użyć swojego asyncFn wewnątrz funkcji oznaczonej jako "asynchroniczna". Na przykład:

async someAsyncCode() { 
    let asyncFn =() => { 
     return new Promise((resolve: Function) => { resolve(2); }); 
    } 
    // should log `2` 
    console.log(await asyncFn()); 
} 
+9

Całkiem szokujące, że nawet głupi kompilator TypeScript nie może dać lepszego komunikatu o błędzie. Coś takiego jak "oczekuj nie może być używane poza zasięgiem asynchronicznym" byłoby w porządku. – user9993