2016-01-20 52 views
1

我只有:節點:試圖使用`異步function`拋出錯誤

router.post('/register', async (req, res) => { 
    // planning to use await in here 
});  

但我發現了這個錯誤。我曾嘗試谷歌搜索,如果節點支持await /異步,但我似乎無法得到任何進展,我只是繼續找到本地模塊實施它到節點(這可能是問題,但我真的希望它的語法錯誤和該節點本地支持異步/等待)

router.post('/register', async (req, res) => { 
         ^

SyntaxError: Unexpected token (
at exports.runInThisContext (vm.js:53:16) 
at Module._compile (module.js:374:25) 
at Object.Module._extensions..js (module.js:405:10) 
at Module.load (module.js:344:32) 
at Function.Module._load (module.js:301:12) 
at Module.require (module.js:354:17) 
at require (internal/module.js:12:17) 
at Object.<anonymous> (/app.js:13:15) 
at Module._compile (module.js:398:26) 
at Object.Module._extensions..js (module.js:405:10) 
at Module.load (module.js:344:32) 
at Function.Module._load (module.js:301:12) 
at Module.require (module.js:354:17) 
at require (internal/module.js:12:17) 
at Object.<anonymous> (/www:7:11) 
at Module._compile (module.js:398:26) 

任何信息將非常感謝。

+3

的Node.js不支持'async'關鍵字,但(僅供參考,其ES2016和不規範甚至還)。 – thefourtheye

+0

@thefourtheye嘆息......爲什麼總是在未來一切都很酷。 – Datsik

+1

使用babel-node。 – 2016-01-20 03:40:18

回答

3

你在這裏的一個選項是babel,它可以將這樣的ES7語法轉換成可以運行的節點。由於ES7仍在進行中,所以您不會在開箱即可獲得異步/等待,但是babel提供了一個轉換(https://babeljs.io/docs/plugins/transform-async-to-generator/),您可以使用它進行轉換。

編輯:巴貝爾已經包含在他們的stage3預置中。所以一旦你安裝NPM和巴貝爾預設:

npm install babel-core babel-preset-stage-3 

並安裝通天-CLI全球,所以你可以在你的shell中運行巴貝爾節點

npm install -g babel-cli 

創建這樣一個.babelrc:

{ 
    "presets": [ 
    "stage-3" 
    ] 
} 

和測試腳本是這樣的:

'use strict'; 

function bar() { 
    return Promise.resolve('banana'); 
} 

async function foo() { 
    return await bar(); 
} 

foo().then(console.log); 

您可以確認它的工作就像這樣:

▶ babel-node test.js 
banana 
相關問題