programing

구문 오류:예기치 않은 토큰 함수 - 비동기 대기 노드js

newsource 2023. 8. 8. 21:40

구문 오류:예기치 않은 토큰 함수 - 비동기 대기 노드js

Node 버전 6.2.1을 일부 코드와 함께 사용하는 것을 실험하고 있습니다.대부분의 하이퍼 콜백 지향 코드를 더 깔끔하고 성능이 더 좋은 코드로 마이그레이션할 계획입니다.

왜 그런지 모르겠어요, 노드 코드를 실행하려고 하면 단말기에서 오류가 발생합니다.

안녕하세요 z.js

(async function testingAsyncAwait() {
    await console.log("Print me!");
})();

로그-

BOZZMOB-M-T0HZ:rest bozzmob$ node helloz.js 
/Users/bozzmob/Documents/work/nextgennms/rest/helloz.js:1
(function (exports, require, module, __filename, __dirname) { (async function testingAsyncAwait() {
                                                                     ^^^^^^^^
SyntaxError: Unexpected token function
    at Object.exports.runInThisContext (vm.js:53:16)
    at Module._compile (module.js:513:28)
    at Object.Module._extensions..js (module.js:550:10)
    at Module.load (module.js:458:32)
    at tryModuleLoad (module.js:417:12)
    at Function.Module._load (module.js:409:3)
    at Function.Module.runMain (module.js:575:10)
    at startup (node.js:160:18)
    at node.js:456:3
BOZZMOB-M-T0HZ:rest bozzmob$ node -v
v6.2.1

제가 무엇을 빠뜨리고 있나요?저도 같은 것에 빛을 좀 비춰주세요.


업데이트 1:

Quentin이 제안한 바벨을 사용하려고 했지만 여전히 다음과 같은 오류가 발생하고 있습니다.

업데이트된 코드

require("babel-core/register");
require("babel-polyfill");

    (async function testingAsyncAwait() {
        await console.log("Print me!");
    })();

로그-

BOZZMOB-M-T0HZ:rest bozzmob$ babel helloz.js > helloz.trans.js
SyntaxError: helloz.js: Unexpected token (3:7)
  1 | require("babel-polyfill");
  2 | 
> 3 | (async function testingAsyncAwait() {
    |        ^
  4 |     await console.log("Print me!");
  5 | })();

7.6 이전 버전의 노드에서는 비동기 기능이 지원되지 않습니다.

이전 버전을 사용하는 경우 코드(예: Babel 사용)를 노드가 인식하는 JS 버전으로 변환해야 합니다.

즉, 비동기 기능을 지원하지 않는 Node.js 버전은 이제 모두 수명이 지났으며 지원되지 않으므로 이전 버전을 사용하는 경우 업그레이드를 매우 강력하게 고려해야 합니다.

Nodejs는 버전 7.6부터 비동기/대기를 지원합니다.

릴리스 게시물: https://v8project.blogspot.com.br/2016/10/v8-release-55.html

Node.JS는 현재 ES6를 완전히 지원하지 않으므로 비동기 대기 모듈을 사용하거나 Babel을 사용하여 변환할 수 있습니다.

설치하다

npm install --save asyncawait

안녕하세요 z.js

var async = require('asyncawait/async');
var await = require('asyncawait/await');

(async (function testingAsyncAwait() {
    await (console.log("Print me!"));
}))();

만약 당신이 단지 실험하는 것이라면, 당신은 사용할 수 있습니다.babel-node새로운 JavaScript 기능을 사용해 보는 명령줄 도구

  1. 설치하다babel-cli당신의 프로젝트에

    $ npm install --save-dev babel-cli

  2. 사전 설정 설치

    $ npm install --save-dev babel-preset-es2015 babel-preset-es2017

  3. 배벨 사전 설정 설정

    만들다.babelrc다음 내용을 포함하는 프로젝트 루트 폴더:

    { "presets": ["es2015","es2017"] }

  4. 스크립트 실행 방법babel-node

    $ babel-node helloz.js

이것은 개발과 테스트만을 위한 것이지만 당신이 하고 있는 것처럼 보입니다.결국 웹 팩(또는 유사한 것)을 설정하여 프로덕션을 위한 모든 코드를 변환할 수 있습니다.

코드를 다른 곳에서 실행하려면 웹 팩이 도움이 되고 다음은 내가 해결할 수 있는 가장 간단한 구성입니다.

node v6.6.0

개발에만 사용하면 됩니다.다음을 수행할 수 있습니다.

npm i babel-cli babel-plugin-transform-async-to-generator babel-polyfill --save-dev

package.json다음과 같습니다.

"devDependencies": {
   "babel-cli": "^6.18.0",
   "babel-plugin-transform-async-to-generator": "^6.16.0",
   "babel-polyfill": "^6.20.0"
}

만들다.babelrc파일 작성 및 작성:

{
  "plugins": ["transform-async-to-generator"]
}

그런 다음 실행합니다.async/await다음과 같은 스크립트:

./node_modules/.bin/babel-node script.js

제가 늦게 들어오긴 했지만, 제게 효과가 있었던 것은 다음과 같은 transform-async-generatortransform-runtime 플러그인을 설치하는 것이었습니다.

npm i babel-plugin-transform-async-to-generator babel-plugin-transform-runtime --save-dev

그자리의 package.json과 같습니다: 다과같습다니음다▁would니다 같습과▁be.

"devDependencies": {
   "babel-plugin-transform-async-to-generator": "6.24.1",
   "babel-plugin-transform-runtime": "6.23.0"
}

를 만들다.babelrc합니다.

{
  "plugins": ["transform-async-to-generator", 
["transform-runtime", {
      "polyfill": false,
      "regenerator": true
    }]
]
}

그리고 행복한 코딩을 합니다.async/await

노드 엔진 버전을 포함하고 최신 버전으로 지정합니다. 이 때 버전 8을 추가했습니다.

{
  "name": "functions",
  "dependencies": {
    "firebase-admin": "~7.3.0",
    "firebase-functions": "^2.2.1",
  },
  "engines": {
    "node": "8"
  },
  "private": true
}

다음 파일에

package.json

언급URL : https://stackoverflow.com/questions/37815790/syntaxerror-unexpected-token-function-async-await-nodejs