ожидают неожиданные идентификатор на узел.js 7.5
я экспериментирую с await
ключевое слово в узел.js. У меня есть этот тестовый скрипт:
"use strict";
function x() {
return new Promise(function(resolve, reject) {
setTimeout(function() {
resolve({a:42});
},100);
});
}
await x();
но когда я запускаю его в узле я получаю
await x();
^
SyntaxError: Unexpected identifier
запускаю ли я его с node
или node --harmony-async-await
или в узле.js 'repl'на моем Mac с узлом.js 7.5 или узел.js 8 (ночная сборка).
как ни странно, тот же код работает в среде runkit JavaScript notebook:https://runkit.com/glynnbird/58a2eb23aad2bb0014ea614b
что я делаю не так?
3 ответа:
спасибо другим комментаторам и некоторым другим исследованиям
await
может использоваться только вasync
функцию, например,async function x() { var obj = await new Promise(function(resolve, reject) { setTimeout(function() { resolve({a:42}); },100); }); return obj; }
затем я мог бы использовать эту функцию в качестве обещания, например
x().then(console.log)
или в другой асинхронной функции.
путано, узел.JS repl не позволяет вам делать
await x();
где, как это делает среда runkit notebook.
как говорили другие, вы не можете вызвать 'await' вне асинхронной функции. Однако, чтобы обойти это, вы можете обернуть await x(); в вызове асинхронной функции. Т. е.,
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) } })();
Это должно работать в узле 7.5 или выше. Также работает в области фрагментов chrome canary.