(ES6)类(ES2017)async/await getter

Enk*_*nki 53 async-await ecmascript-6 ecmascript-2017

是否可以让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');
Run Code Online (Sandbox Code Playgroud)

Fra*_*alf 36

你可以这样做

class Foo {
    get bar() {
        return (async () => {
            return await someAsyncOperation();
        })();
    }
}
Run Code Online (Sandbox Code Playgroud)

这也是一样的

class Foo {
    get bar() {
        return new Promise((resolve, reject) => {
            someAsyncOperation().then(result => {
                resolve(result);
            });
        })
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 不,它不会像Enki问的那样返回结果,但是答应 (4认同)
  • 这与```get bar(){return someAsyncOperation()}```完全相同 (4认同)
  • 或者`class Foo {get bar(){return(async()=> await someAsyncOperation)()}}`) (2认同)

Ber*_*rgi 16

你只能await承诺,async功能将自己返回承诺.
当然,吸气剂也可以产生这样的承诺,与正常值没有区别.


kub*_*oon 6

您可以await在调用方获得该值。

class Foo {
    get bar() {
        return someAsyncOperation();
    }
}
async function test(){
  let foo = new Foo, val = await foo.bar;
  val.should.equal('baz');
}
Run Code Online (Sandbox Code Playgroud)