Est-il possible ou possible qu'un getter de classe ES6 renvoie une valeur à partir d'une fonction d'attente/async ES2017.
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');
Tu peux le faire
class Foo {
get bar() {
return (async () => {
return await someAsyncOperation();
})();
}
}
qui est à nouveau le même que
class Foo {
get bar() {
return new Promise((resolve, reject) => {
someAsyncOperation().then(result => {
resolve(result);
});
})
}
}
Vous ne pouvez que await
promesses, et les fonctions async
renverront elles-mêmes les promesses.
Bien sûr, un getter peut aussi faire une telle promesse, il n'y a pas de différence avec une valeur normale.
Vous pouvez obtenir la valeur par await
du côté de l'appelant.
class Foo {
get bar() {
return someAsyncOperation();
}
}
async function test(){
let foo = new Foo, val = await foo.bar;
val.should.equal('baz');
}