‘await Unexpected identifier’ no Node.js 7.5

Estou experimentando a palavra-chave await em Node.js. Eu tenho este script de teste:

 "use strict"; function x() { return new Promise(function(resolve, reject) { setTimeout(function() { resolve({a:42}); },100); }); } await x(); 

Mas quando eu corro no nó eu recebo

 await x(); ^ SyntaxError: Unexpected identifier 

quer eu o execute com node ou node --harmony-async-await ou no Node.js ‘repl’ no meu Mac com o Node.js 7.5 ou o Node.js 8 (nightly build).

Estranhamente, o mesmo código funciona no ambiente de notebook do Runkit JavaScript: https://runkit.com/glynnbird/58a2eb23aad2bb0014ea614b

O que estou fazendo de errado?

Graças aos outros comentadores e algumas outras pesquisas await só pode ser usado em uma function async , por exemplo

 async function x() { var obj = await new Promise(function(resolve, reject) { setTimeout(function() { resolve({a:42}); },100); }); return obj; } 

Eu poderia então usar essa function como uma promise, por exemplo

 x().then(console.log) 

ou em outra function assíncrona.

Confusamente, a replicação do Node.js não permite que você faça

 await x(); 

onde o ambiente de notebook do RunKit funciona.

Como outros já disseram, você não pode chamar ‘await’ fora de uma function assíncrona. No entanto, para contornar isso, você pode envolver o await x (); em uma chamada de function assíncrona. Ou seja

 function x() { return new Promise(function(resolve, reject) { setTimeout(function() { resolve({a:42}); },100); }); } //Shorter Version of x(): var x = () => new Promise((res,rej)=>setTimeout(() => res({a:42}),100)); (async ()=>{ try{ var result = await x(); console.log(result); }catch(e){ console.log(e) } })(); 

Isso deve funcionar no nó 7.5 ou acima. Também trabalha na área de trechos de cromo canário.

assim, como sugerido por outros, esperamos que ele funcione dentro de asynchronous. Então você pode usar o código abaixo para evitar usar:

 async function callX() { let x_value = await x(); console.log(x_value); } callX();