2015-11-23 36 views
15

Czy jest możliwe, czy będzie możliwe pobranie pobierającego klasę ES6 zwracającego wartość z funkcji oczekującej/asynchronicznej ES2017.(ES6) klasa (ES2017) async/czekaj na 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

To wszystko, czego potrzebujesz: 'dostać bar() {return someAsyncOperation(); } ' –

+0

@FelixKling Zaktualizowałem swój post, aby, mam nadzieję, wyjaśnić moje pytanie. Nie próbuję zwrócić funkcji od gettera. Chcę, aby wartość zwracana pochodziła z operacji asynchronicznej. – Enki

+0

Tak, 'return someAsyncOperation(); zwraca obietnicę, że' someAsyncOperation' zwraca. Nie zwraca funkcji (co spowodowało, że tak uważasz?) –

Odpowiedz

11

można tylko await obietnic i async funkcje wrócą same obietnice.
Oczywiście getter może również przynieść taką obietnicę, nie ma żadnej różnicy od normalnej wartości.

13

Można to zrobić

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

który znowu jest taka sama jak

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