ES6クラスのgetterがES2017 await/async関数から値を返すことは可能ですか?.
class Foo {
async get bar() {
var result = await someAsyncOperation();
return result;
}
}
function someAsyncOperation() {
return new Promise(function(resolve) {
setTimeout(function() {
resolve('baz');
}, 1000);
});
}
var foo = new Foo();
foo.bar.should.equal('baz');
あなたはこれを行うことができます
class Foo {
get bar() {
return (async () => {
return await someAsyncOperation();
})();
}
}
これも同じです
class Foo {
get bar() {
return new Promise((resolve, reject) => {
someAsyncOperation().then(result => {
resolve(result);
});
})
}
}
約束できるのはawait
のみで、async
関数はpromise自体を返します。
もちろん、ゲッターはそのような約束をすることもできますが、通常の値との違いはありません。
呼び出し側のawait
で値を取得できます。
class Foo {
get bar() {
return someAsyncOperation();
}
}
async function test(){
let foo = new Foo, val = await foo.bar;
val.should.equal('baz');
}