2017-06-14 16 views
1

ちょっとした問題は解決できません。私はノードv8.1.1で、非同期/待機を使用しようとしますが、動作しません。非同期/待機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です。なぜノードが 'await'の使用をルートから直接処理できないのか分かりますか? – mbreton

+0

仕様で許可されていないためです。 –

答えて

3

非同期は/ node8にsupporedされて待っていた場合、私は言うことはできませんが、あなたがそうのような機能での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

async/awaitはノードv8.xでサポートされています。しかし、非同期関数内にある必要があります。彼らは常にペアになります。