(ES6) (ES2017) async/wait getter
Возможно ли, чтобы у получателя класса ES6
верните значение из функции ожидания ESIS2017/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');
Ответы
Ответ 1
Вы можете сделать это
class Foo {
get bar() {
return (async () => {
return await someAsyncOperation();
})();
}
}
который снова совпадает с
class Foo {
get bar() {
return new Promise((resolve, reject) => {
someAsyncOperation().then(result => {
resolve(result);
});
})
}
}
Ответ 2
Вы можете использовать только await
promises, а функции async
возвратят сами promises.
Конечно, геттер может дать такое обещание так же хорошо, нет никакой разницы от нормального значения.
Ответ 3
Вы можете получить значение, await
на стороне вызывающего абонента.
class Foo {
get bar() {
return someAsyncOperation();
}
}
async function test(){
let foo = new Foo, val = await foo.bar;
val.should.equal('baz');
}
Ответ 4
Наличие async
геттера подразумевает, что у вас есть сеттер, ожидающий асинхронное значение. Если значение, которое вы выставляете через аксессоры, само по себе не асинхронно, я не уверен, что вы используете ключевые слова get
/set
правильно.