সিনট্যাক্স এরর: অপ্রত্যাশিত টোকেন ফাংশন - অ্যাসিঙ্ক অ্যাওয়েট নোডেজ


122

আমি আমার কিছু কোড সহ নোড সংস্করণ .2.২.১ ব্যবহার করার জন্য পরীক্ষা করছিলাম। হাইপার-কলব্যাক ওরিয়েন্টেড কোডগুলির বেশিরভাগ স্থানে এমন কিছুতে স্থানান্তরিত করার পরিকল্পনা ছিল যা পরিষ্কার দেখায় এবং আরও ভাল সম্পাদন করে।

আমার নোড কোডটি কার্যকর করার চেষ্টা করার সময় টার্মিনালটি একটি ত্রুটি ছুঁড়েছে কেন তার কোনও ক্লু নেই।

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
নোড.জেএস এখন আনুষ্ঠানিকভাবে অ্যাসিঙ্ক ফাংশন সমর্থন করে। এই উত্তর দেখুন
জ্যোতমন সিং

2
@ জ্যোতমনসিংহ হ্যাঁ আমি জানি এটি এখন সমর্থন করে। যখন আমাদের বাবেল ব্যবহার করতে হয়েছিল তখন এই প্রশ্নটি প্রায় এক বছর আগে জিজ্ঞাসা করেছিল। যদিও উল্লেখ করার জন্য ধন্যবাদ।
Bozzmob

4
আমি কেবল এখানে পোস্ট করেছি কারণ অনেক লোক এখনও এই প্রশ্নে আসবে। তাদের জানা উচিত।
জ্যোতমন সিং

উত্তর:


166

অ্যাসিঙ্ক ফাংশনগুলি নোড সংস্করণ 7.6 সংস্করণের চেয়ে পুরানো দ্বারা সমর্থিত নয়

আপনাকে আপনার কোডটি (যেমন বাবেল ব্যবহার করে ) জেএস এর এমন একটি সংস্করণে স্থানান্তর করতে হবে যা আপনি কোনও পুরানো সংস্করণ ব্যবহার করছেন কিনা তা নোড বুঝতে পারে।

এটি বলেছে, নোড.জেএস এর বর্তমান (2018) এলটিএস সংস্করণটি 8.x, সুতরাং আপনি যদি পূর্ববর্তী সংস্করণ ব্যবহার করেন তবে আপনাকে আপগ্রেড করার বিষয়টি খুব দৃ strongly়তার সাথে বিবেচনা করা উচিত।


36

নোডেজগুলি async সমর্থন করে / সংস্করণ 7.6 থেকে অপেক্ষা করুন।

প্রকাশের পোস্ট: https://v8project.blogspot.com.br/2016/10/v8-release-55.html


আপনি আপনার ফাংশনটি নোডজেএস ভি 6 বা ভি 8 হিসাবে স্থাপন করতে পারেন তা নিশ্চিত করে আপনি ভি 8 (বিটা) হিসাবে স্থাপন করেছেন।
অ্যারন হালভোরসেন

28

Node.js সম্পূর্ণরূপে, বর্তমানে ES6 সমর্থন করে না, যাতে আপনি হয় ব্যবহার করতে পারেন asyncawait মডিউল বা transpile 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
পলিফিলের প্রতীক্ষা ও অ্যাসিঙ্কের জন্য উপরের লাইব্রেরিটি (অ্যাসিঙ্কাওয়েট) ব্যবহার করার সময় এটি প্রথম বন্ধনী ব্যবহার করা জরুরী। 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 দেখতে পাচ্ছি?
অস্কার নেভারেজ

আমি Babel-নোড helloz.js পরিবর্তে ./node_modules/.bin/babel-node helloz.js ব্যবহার করা প্রয়োজন
মার্টি

হাই মার্টি, আমি মনে করি এটি নির্ভর করে যদি আপনি বাবেল-নোড বিশ্বব্যাপী ইনস্টল করে থাকেন বা কেবল প্যাকেজ প্রকল্পের মধ্যে আমার ক্ষেত্রে আমার সম্ভবত এটি বিশ্বব্যাপী ইনস্টল করা হয়েছিল
stujo

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, ব্যাগেল-প্লাগইন-ট্রান্সফর্ম-অ্যাসিঙ্ক-টু-জেনারেটর ব্যবহার করে uglif ব্যবহার করার সময় আমার সমস্যা সমাধান করে
ডেভি

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
যদি আপনি কৌণিকের জন্য ভিজ্যুয়াল স্টুডিও কোড ব্যবহার করেন তবে উপরের থেকে এনপিএম ইনস্টল ব্যবহার করার পরে আপনার কোনও কাজ করার দরকার নেই। সবকিছু স্বয়ংক্রিয়ভাবে ইনস্টল এবং কনফিগার করা হবে, তবে যাইহোক আপনাকে ধন্যবাদ!
চেইনস্টায়ার

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 ব্যবহারের পাশাপাশি নোড ভি 6.2 চালিয়ে যাচ্ছিলাম। সমস্যাটি তখনই ঘটেছিল যখন আমি একটি নতুন লারাভেল প্রকল্প তৈরি করি; এই অবধি অবধি, আমার কখনই পুরেজেস নিয়ে সমস্যা হয়নি।

@ কোয়ান্টিনের বক্তব্য অনুসরণ করে - .6..6 এর পূর্বে নোড সংস্করণগুলি অ্যাসিঙ্ক ফাংশন সমর্থন করে না - আমি আমার নোড সংস্করণটি 9.11.2 এ আপডেট করার সিদ্ধান্ত নিয়েছি

এটি আমার পক্ষে কাজ করেছে:

1-

$ npm install -g n

$ n 9.11.2

2-

রুট ডিরেক্টরি থেকে 'নোড_মডিউলস' মুছুন

3-

$ npm install

এখনও নিশ্চিত না যে নোড / পূর্জিকস আপডেট করার আগে কীভাবে কাজ করেছিল .. তবে এটি কৌশলটি করেছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.