Не удается создать асинхронные методы на узле на Cloud9 - PullRequest
0 голосов
/ 16 мая 2018

Я портирую код, написанный в браузере, и обнаружил, что не могу создать асинхронные методы в NodeJS

class Test{
    async hello(){
        return "hello";
    }
}

(async function(){
    let test = new Test();
    let hello = await test.hello();
    console.log(hello);
})();

Когда я выполняю это, я получаю ошибку:

/home/ubuntu/workspace/test.js:2
    async hello(){
          ^^^^^

SyntaxError: Unexpected identifier
    at createScript (vm.js:56:10)
    at Object.runInThisContext (vm.js:97:10)
    at Module._compile (module.js:542:28)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Timeout.Module.runMain [as _onTimeout] (module.js:604:10)
    at ontimeout (timers.js:386:14)
    at tryOnTimeout (timers.js:250:5)

Это просто невозможно в узле, или я не ошибаюсь?

Я бегу Node 8.x

1 Ответ

0 голосов
/ 16 мая 2018

Ошибка в этом коде следующая:

let hello = await test.hello();
                  ^^^^

SyntaxError: Unexpected identifier

Это происходит потому, что вы используете ключевое слово await вне функции async.

Из документы :

Оператор ожидания используется для ожидания обещания. Может использоваться только внутри асинхронной функции .

class Test{
    async hello(){
        return "hello";
    }
}


(async() => {
  // You can only use `await` inside async function
  let test = new Test();
  let hello = await test.hello();
  console.log(hello);
})();

Is this just not possible in node, or am I don't something incorrect here? 
I am running Node 8.x

Узел поддерживает async/await начиная с версии 7.6, поэтому вы можете использовать его свободно.

Обновление:

Если вы получаете:

async hello(){
      ^^^^^

SyntaxError: Unexpected identifier

Это означает, что вы работаете на более старой версии узла.Попробуйте

console.log(process.version);

и 100% напечатает версию ниже 7.6.

У вас может быть узел 8.x на вашем компьютере, но не в облаке 9, для обновления узла в облаке 9 проверьтеследующий вопрос:

...