2017-01-20 18 views
14

Myślałem asynchroniczny/Oczekujcie był wspierany w węźle 7,4, jednak ten przykład nie działa:Korzystanie asynchronicznie/czekają w węźle 7,4

const Promise = require('bluebird'); 

async function main(){ 
    await Promise.delay(1000) 
} 

main(); 

Wyniki w:

async function main(){ 
     ^^^^^^^^ 
SyntaxError: Unexpected token function 

Jak mogę używać asynchronicznie/czekać na węzeł 7.4?

+0

Możliwe duplikat [async oczekiwać z nodejs 7] (http://stackoverflow.com/questions/41347260/async-await-with-nodejs- 7) –

Odpowiedz

48

Tak asynchroniczny-Oczekujcie jest obsługiwana w node.js v7 ale jest zablokowana za flagą harmony. Funkcje, które nie są jeszcze gotowe do produkcji, znajdują się za tą flagą.

Aby użyć asynchronicznego-czekają node.js v7 wystarczy uruchomić usługę węzła z tej flagi -

node --harmony-async-await app.js

Oficjalne wydanie asynchronicznym-czekają trafi do node.js V8, która zostanie uruchomiona w Kwiecień.

Możesz śledzić this żądanie pobrania, aby sprawdzić jego status. Zasadniczo poprawne działanie funkcji async-await zależy od integracji silnika V8 w wersji 5.5 z Node.js. Obecnie Node.js używa V8 v5.4, który jest rozwiązywany przez to żądanie ściągania.

Aktualizacja 1 - Wygląda na to, że V8 v5.5 może pojawić się w Node.js v7. Postępuj zgodnie z this prośbą o pociągnięcie, aby uzyskać więcej informacji.

Aktualizacja 2 - Dobre wiadomości! Node.js w wersji 7.6.0 teraz oficjalnie obsługuje funkcje async bez używania flagi --harmony, ponieważ silnik V8 5.5 został pomyślnie przeniesiony.

Teraz wystarczy użyć tylko flagi --harmony, jeśli wersja Node.js zawiera się w przedziale od 7.0 do 7.5.0 (włącznie). Pełny wykaz zmian znajduje się pod adresem here.

2

Będziesz potrzebował flagi harmonii, aby to działało.

Spróbuj ponownie node --harmony-async-await myscript.js

14

Node.js 7.6.0 wydany kilka godzin temu i zawierał v8 5.5. Teraz możesz używać async/wait bez flagi.

2

Wersja węzła 7.6 obsługuje teraz asynchroniczne/oczekiwanie po wyjęciu z pudełka. Jeśli jeszcze go nie wypróbowałeś, powinieneś go natychmiast przyjąć i nigdy nie patrzeć wstecz.

const makeRequest =() => 
     getJSON() 
     .then(data => { 
      console.log(data) 
      return "done" 
     }) 

    makeRequest() 

, i za pomocą asynchronicznego/Await:

const makeRequest = async() => { 
    console.log(await getJSON()) 
    return "done" 
} 

makeRequest()