2015-11-23 4 views
15

Ist es oder wird es möglich sein, eine ES6-Klasse Getter einen Wert aus einer ES2017 erwarten/async-Funktion.(ES6) Klasse (ES2017) async/erwarten 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

Das ist alles, was Sie brauchen: 'get bar() {return someAsyncOperation(); } ' –

+0

@FelixKling Ich habe meinen Beitrag aktualisiert, um meine Frage zu klären. Ich versuche nicht, eine Funktion vom Getter zurückzugeben. Ich möchte, dass der Rückgabewert von einer asynchronen Operation kommt. – Enki

+0

Ja, 'return someAsyncOperation();' gibt das Versprechen zurück, das 'someAsyncOperation' zurückgibt. Es gibt keine Funktion zurück (was hat Sie dazu gebracht?) –

Antwort

11

Sie können nur await Versprechen und async Funktionen verspricht sich zurück.
Natürlich kann ein Getter auch so ein Versprechen geben, es gibt keinen Unterschied zu einem normalen Wert.

13

Sie können tun, um diese

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

die wiederum ist die gleiche wie

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