2017-06-14 229 views
1

只是一个我无法修复的小问题。我在Node v8.1.1上,我尝试使用async/await,但它不起作用。我的代码片段看起来是这样的:异步/等待nodejs支持?

const axios = require('axios'); 

const TOKEN = '...'; 

const httpClient = axios.create({ 
    baseURL : 'https://myhost/api/', 
    headers : { 
     'Authorization': `Token ${TOKEN}` 
    } 
}); 

try { 
    const resp = await httpClient.get('users?limit=200'); 
} catch(e) { 
    console.error(`Fail !\n${e}`); 
} 

当我尝试运行它,我得到这个错误信息,并没有发生:

/Users/mathieu/workspaces/galactic-tools/index.js:13 
    const resp = await httpClient.get('users?limit=200'); 
         ^^^^^^^^^^ 

SyntaxError: Unexpected identifier 
    at createScript (vm.js:74:10) 
    at Object.runInThisContext (vm.js:116:10) 
    at Module._compile (module.js:533:28) 
    at Object.Module._extensions..js (module.js:580:10) 
    at Module.load (module.js:503:32) 
    at tryModuleLoad (module.js:466:12) 
    at Function.Module._load (module.js:458:3) 
    at Function.Module.runMain (module.js:605:10) 
    at startup (bootstrap_node.js:158:16) 
    at bootstrap_node.js:575:3 

异步/伺机应该由节点版本8中的直接支持, 对 ? 如有疑问,我试图用node --harmony-async-await index.jsnode --harmony index.js运行而没有结果。

+3

'await'只在'async'函数内有效。 –

+0

它工作:)但它很奇怪Oo。你知道为什么node不能直接从root处理'await'用法吗? – mbreton

+0

因为规范不允许。 –

回答

3

我不能说,如果异步地等待着node8是扶持产品/,但你可以尝试包裹的try/catch中的函数,像这样:

async function callService() { 
    try { 
     const resp = await httpClient.get('users?limit=200'); 
    } catch(e) { 
     console.error(`Fail !\n${e}`); 
    } 
} 
callService() 

,因为它应该很清楚哪些块将具有异步行为。同样为了这个工作,httpClient.get()应该返回一个Promise。确保它是如此。

+4

http://node.green/可以告诉你它是否可用;) –

+0

确实,我查询之前问这个问题 – mbreton

0

节点v8.x支持async/await。但是,等待必须在内部的异步功能。他们总是成对的。