我无法解决的一个小问题。我在Node v8.1.1上尝试使用async / await,但它不起作用。我的代码片段如下所示:
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应该直接支持Async / await,对吗?
有疑问的是,我尝试使用node --harmony-async-await index.js
和node --harmony index.js
而没有结果。
答案 0 :(得分:5)
我不能说node8中是否支持async / await,但是您可以尝试在这样的函数中包装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
。确保就是这样。
答案 1 :(得分:4)
节点v8.x支持async / await。但是,等待必须在异步函数内。他们总是成对出现。