SyntaxError: अप्रत्याशित टोकन फ़ंक्शन - Async Await Nodejs


122

मैं अपने कुछ कोड के साथ नोड संस्करण 6.2.1 का प्रयोग कर रहा था । कुछ हाइपर-कॉलबैक ओरिएंटेड कोड्स को माइग्रेट करने की योजना बनाता था जो क्लीनर दिखता है और शायद बेहतर प्रदर्शन करता है।

मुझे कोई सुराग नहीं है कि, नोड कोड निष्पादित करने का प्रयास करते समय टर्मिनल एक त्रुटि को फेंक देता है।

helloz.js

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

Logs-

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:

मैंने बेंटेल का उपयोग करने की कोशिश की जैसा कि क्वेंटिन ने सुझाव दिया था, लेकिन, मुझे अभी भी निम्नलिखित त्रुटि मिल रही है।

अपडेटेड कोड-

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

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

Logs-

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 | })();

2
Node.js अब आधिकारिक रूप से async फ़ंक्शन का समर्थन करता है। इस उत्तर को देखें
ज्योतिमान सिंह

2
@ ज्योतिमनसिंह हां। मुझे पता है कि यह अब समर्थन करता है। यह सवाल एक साल पहले के करीब पूछ रहा था जब हमें बेबल का इस्तेमाल करना था। हालांकि उल्लेख के लिए धन्यवाद।
बूजमोब

4
मैंने अभी यहां पोस्ट किया है क्योंकि कई लोग अभी भी इस सवाल पर आएंगे। उन्हें पता होना चाहिए।
ज्योतिमान सिंह

जवाबों:


166

Async फ़ंक्शंस 7.6 संस्करण से पुराने नोड संस्करणों द्वारा समर्थित नहीं हैं ।

आपको अपने कोड को ट्रांसलेट करने की आवश्यकता होगी (जैसे बाबेल का उपयोग करके ) जेएस के एक संस्करण के लिए जिसे नोड समझता है कि आप पुराने संस्करण का उपयोग कर रहे हैं।

उस ने कहा, Node.js का वर्तमान (2018) LTS संस्करण 8.x है, इसलिए यदि आप पहले के संस्करण का उपयोग कर रहे हैं तो आपको बहुत दृढ़ता से उन्नयन पर विचार करना चाहिए।


36

Nodejs वर्जन 7.6 से async / प्रतीक्षा का समर्थन करता है।

रिलीज़ पोस्ट: https://v8project.blogspot.com.br/2016/10/v8-release-55.html


आप अपने फ़ंक्शन को NodeJS v6 या v8 के रूप में तैनात कर सकते हैं, सुनिश्चित करता है कि आप v8 (बीटा) के रूप में तैनात हैं।
आरोन हलवोरसेन

28

Node.JS वर्तमान में ES6 का पूरी तरह से समर्थन नहीं करता है, इसलिए आप या तो Asyncawait मॉड्यूल का उपयोग कर सकते हैं या Bable का उपयोग करके इसे ट्रांसपाइल कर सकते हैं।

इंस्टॉल

npm install --save asyncawait

helloz.js

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

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

8
पॉलीफ़िल वेट और एसिंक्स के ऊपर लाइब्रेरी (asyncawait) का उपयोग करते समय कोष्ठक का उपयोग करना महत्वपूर्ण है। ES2017 में, वेट और एसिंक्स कीवर्ड हैं। उपरोक्त पुस्तकालय में, वे कार्य हैं।
फिल

19

यदि आप अभी प्रयोग कर रहे हैं तो आप babel-nodeनई जावास्क्रिप्ट विशेषताओं को आज़माने के लिए कमांड लाइन टूल का उपयोग कर सकते हैं

  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

यह केवल विकास और परीक्षण के लिए है लेकिन लगता है कि आप क्या कर रहे हैं। अंत में आप उत्पादन के लिए अपने सभी कोड को बदलने के लिए वेबपैक (या कुछ इसी तरह) स्थापित करना चाहेंगे

यदि आप कोड को कहीं और चलाना चाहते हैं, तो वेबपैक मदद कर सकता है और यहां सबसे सरल कॉन्फ़िगरेशन है जो मैं बाहर काम कर सकता हूं:


फिर से संघर्ष करो और मुझे वही परिणाम मिला। मैं गीथूब ¿पर 404 देख रहा हूं?
ऑस्कर नेवरेज

मैं का उपयोग करने की जरूरत है ./node_modules/.bin/babel-node helloz.js के बजाय बबल-नोड हेल्लोज़.जेएस
मार्टी

हाय मार्टी, मुझे लगता है कि यह इस बात पर निर्भर करता है कि क्या आपने विश्व स्तर पर या पैकेज प्रोजेक्ट के भीतर ही
बैबल

12

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

thx, बैबल-प्लगइन-ट्रांसफॉर्मेशन-एसिंक्स-टू-जेनरेटर का उपयोग करते हुए मेरी समस्या को हल करता है जब कुरकुरा का उपयोग करते हैं
davey

3

हालांकि मैं देर से आ रहा हूं, मेरे लिए ट्रांसफ़ॉर्म-एक्सीन-जनरेटर और ट्रांसफ़ॉर्म-रनटाइम प्लगइन स्थापित करने के लिए क्या काम किया गया था :

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

package.jsonइस तरह होगा:

"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


1
यदि उर के लिए दृश्य स्टूडियो कोड का उपयोग कर रहा है, तो आपको ऊपर से npm इंस्टॉल का उपयोग करने के बाद कोई काम करने की आवश्यकता नहीं है। सब कुछ स्वचालित रूप से स्थापित और कॉन्फ़िगर किया जाएगा, लेकिन फिर भी धन्यवाद!
चेनस्टेयर

1

नोड इंजन संस्करण को नवीनतम संस्करण में शामिल करें और निर्दिष्ट करें, इस समय कहें कि मैंने संस्करण 8 जोड़ा है।

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

निम्न फ़ाइल में

package.json


0

मेरी भी यही समस्या थी।

मैं अपने gulpfile के भीतर purgecss का उपयोग करके नोड v 6.2 चला रहा था। समस्या केवल तब हुई जब मैंने एक नया लारवेल प्रोजेक्ट बनाया; उस बिंदु तक, मैं कभी भी purgecss के साथ एक मुद्दा नहीं था।

@ क्वेंटिन के कथन के बाद - कैसे नोड संस्करण 7.6 से पहले async फ़ंक्शंस का समर्थन नहीं करते हैं - मैंने अपने नोड संस्करण को 9.11.2 पर अपडेट करने का निर्णय लिया

यह मेरे लिए काम किया:

1-

$ npm install -g n

$ n 9.11.2

2-

मार्ग निर्देशिका से 'node_modules' हटाएं

3-

$ npm install

अभी भी यकीन नहीं है कि कैसे नोड / purgecss अद्यतन करने से पहले काम किया .. लेकिन यह चाल किया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.