2015-11-23 19 views
15

Bir ES6 sınıfı getter bir ES2017 bekleme/eşzamanlama işlevinden bir değer döndürmesi mümkün mü ya da mümkün olabilir mi?(ES6) sınıfı (ES2017) async/await getter

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'); 
+3

aynıdır bu

class Foo { get bar() { return (async() => { return await someAsyncOperation(); })(); } } 

yapabilirsiniz: 'çubuğu (get) {) (someAsyncOperation return; } ' –

+0

@FelixKling Sorumu umarım açıklığa kavuşturmak için yazımı güncelledim. Alıcıdan bir işlev döndürmeye çalışmıyorum. Dönüş değerinin bir async işleminden gelmesini istiyorum. – Enki

+0

Evet, 'return someAsyncOperation();', 'SomeAsyncOperation' döndürdüğü sözünü döndürür. Bir işlev döndürmüyor (bunu ne düşündün?) –

cevap

11

Yalnızca await vaat ve async fonksiyonları sözler kendileri dönecektir edebilirsiniz.
Elbette bir alıcı da böyle bir vaat verebilir, normal bir değerden fark yoktur.

13

Bu tek ihtiyacınız olan yine

class Foo { 
    get bar() { 
     return new Promise((resolve, reject) => { 
      someAsyncOperation().then(result => { 
       resolve(result); 
      }); 
     }) 
    } 
} 
İlgili konular