Programing

Node.js 7.5에서 '예기치 않은 식별자 대기'

lottogame 2020. 11. 1. 17:16
반응형

Node.js 7.5에서 '예기치 않은 식별자 대기'


awaitNode.js 키워드를 실험하고 있습니다 . 이 테스트 스크립트가 있습니다.

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

하지만 노드에서 실행하면

await x();
      ^
SyntaxError: Unexpected identifier

나는 그것을 실행 여부 nodenode --harmony-async-await또는 Node.js를 7.5 Node.js를 8 (야간 빌드) 내 Mac에서 Node.js를 'REPL'에서.

이상하게도 동일한 코드가 Runkit JavaScript 노트북 환경에서 작동합니다 : https://runkit.com/glynnbird/58a2eb23aad2bb0014ea614b

내가 도대체 ​​뭘 잘못하고있는 겁니까?


다른 댓글 작성자와 일부 다른 연구 덕분에 함수 await에서만 사용할 수 있습니다.async

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

그런 다음이 기능을 Promise로 사용할 수 있습니다.

x().then(console.log)

또는 다른 비동기 함수에서.

혼란스럽게도 Node.js repl은 할 수 없습니다.

await x();

RunKit 노트북 환경과 마찬가지로.


다른 사람들이 말했듯이 비동기 함수 밖에서는 '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)
    }
})();

이것은 Node 7.5 이상에서 작동합니다. 크롬 카나리아 스 니펫 영역에서도 작동합니다.


다른 사람들이 제안한 것처럼 await는 비동기 내부에서 작동합니다. 따라서 다음 코드를 사용하여 사용을 피할 수 있습니다.

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

callX();

참고 URL : https://stackoverflow.com/questions/42225480/await-unexpected-identifier-on-node-js-7-5

반응형