Node.jsのawait
キーワードを試しています。私はこのテストスクリプトを持っています:
"use strict";
function x() {
return new Promise(function(resolve, reject) {
setTimeout(function() {
resolve({a:42});
},100);
});
}
await x();
しかし、ノードで実行すると
await x();
^
SyntaxError: Unexpected identifier
node
またはnode --harmony-async-await
で実行するか、Mac上のNode.js 7.5またはNode.js 8(ナイトリービルド)でNode.jsの 'repl'で実行するかにかかわらず。
奇妙なことに、同じコードがRunkit JavaScriptノートブック環境でも動作します。 https://runkit.com/glynnbird/58a2eb23aad2bb0014ea614b
何がおかしいのですか?
他のコメンターや他の研究のおかげで、await
はasync
関数でのみ使用できます。
async function x() {
var obj = await new Promise(function(resolve, reject) {
setTimeout(function() {
resolve({a:42});
},100);
});
return obj;
}
私はそれから約束としてこの機能を使用することができます。
x().then(console.log)
または別の非同期機能で。
混乱を招くように、Node.jsの回答ではできません
await x();
runKitノートブック環境と同じように。
他の人が言っているように、非同期関数の外で 'await'を呼ぶことはできません。しかし、これを回避するには、await x()をラップします。非同期関数呼び出しで。すなわち、
function x() {
return new Promise(function(resolve, reject) {
setTimeout(function() {
resolve({a:42});
},100);
});
}
//Shorter Version of x():
var x = () => new Promise((res,rej)=>setTimeout(() => res({a:42}),100));
(async ()=>{
try{
var result = await x();
console.log(result);
}catch(e){
console.log(e)
}
})();
これはノード7.5以降で動作するはずです。クロムカナリアスニペット領域でも動作します。
そう他の人によって示唆されるように非同期が内部で動作するのを待ちます。したがって、thenを使用しないようにするには、以下のコードを使用します。
async function callX() {
let x_value = await x();
console.log(x_value);
}
callX();