(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 правильно.