SyntaxError: Unexpected token function - Async Await Nodejs
Solution 1
Async functions are not supported by Node versions older than version 7.6.
You'll need to transpile your code (e.g. using Babel) to a version of JS that Node understands if you are using an older version.
That said, versions of Node.js which don’t support async functions are now all past End Of Life and are unsupported, so if you are using an earlier version you should very strongly consider upgrading.
Solution 2
Nodejs supports async/await from version 7.6.
Release post: https://v8project.blogspot.com.br/2016/10/v8-release-55.html
Solution 3
Node.JS does not fully support ES6 currently, so you can either use asyncawait module or transpile it using Babel.
install
npm install --save asyncawait
helloz.js
var async = require('asyncawait/async');
var await = require('asyncawait/await');
(async (function testingAsyncAwait() {
await (console.log("Print me!"));
}))();
Solution 4
If you are just experimenting you can use babel-node
command line tool to try out the new JavaScript features
-
Install
babel-cli
into your project$ npm install --save-dev babel-cli
-
Install the presets
$ npm install --save-dev babel-preset-es2015 babel-preset-es2017
-
Setup your babel presets
Create
.babelrc
in the project root folder with the following contents:{ "presets": ["es2015","es2017"] }
-
Run your script with
babel-node
$ babel-node helloz.js
This is only for development and testing but that seems to be what you are doing. In the end you'll want to set up webpack (or something similar) to transpile all your code for production
- babel-node sample code : https://github.com/stujo/javascript-async-await/tree/15abac
If you want to run the code somewhere else, webpack can help and here is the simplest configuration I could work out:
- Full webpack example : https://github.com/stujo/javascript-async-await
Solution 5
node v6.6.0
If you just use in development. You can do this:
npm i babel-cli babel-plugin-transform-async-to-generator babel-polyfill --save-dev
the package.json
would be like this:
"devDependencies": {
"babel-cli": "^6.18.0",
"babel-plugin-transform-async-to-generator": "^6.16.0",
"babel-polyfill": "^6.20.0"
}
create .babelrc
file and write this:
{
"plugins": ["transform-async-to-generator"]
}
and then, run your async/await
script like this:
./node_modules/.bin/babel-node script.js
bozzmob
Simple living, High Thinking. Tech Enthusiast. I'm high on Javascript! Simply love Mozilla and Android.
Updated on July 08, 2022Comments
-
bozzmob almost 2 years
I was experimenting on using Node version 6.2.1 with some of my code. Had plans to migrate most of the hyper-callback oriented codes to something that looks cleaner and maybe performs better.
I have no clue why, the terminal throws up an error when I try to execute the node code.
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
What am I missing? Please throw me some light on the same.
Update 1:
I tried to use Babel as Quentin suggested, But, I am getting the following error still.
Updated Code-
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 | })();
-
Phil over 7 yearsIt is vital to use the parenthesis when using the library above (asyncawait) to polyfill await and async. In ES2017, await and async are keywords. In the library above, they are functions.
-
davey almost 7 yearsthx, using babel-plugin-transform-async-to-generator solves my issue when using uglify
-
Oscar Nevarez over 6 yearsClic again and I got the same result. I see a 404 on github ¿?
-
Marty almost 6 yearsI needed to use ./node_modules/.bin/babel-node helloz.js instead of babel-node helloz.js
-
stujo over 5 yearsHi Marty, I think that depends on if you have babel-node installed globally or just within the package project, in my case I probably had it installed globally
-
Aaron Halvorsen over 5 yearsYou can deploy your function as NodeJS v6 or v8, makes sure you deploy as v8(Beta).
-
chainstair about 5 yearsif u r using visual studio code for angular, u don't need to do any work after using npm install from above. Everything will be installed and configured automatically, but thank you anyway!