2015-11-23 49 views
15

是或可能有一個ES6類獲取器 從ES2017 await/async函數返回一個值。(ES6)class(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

這是你所需要的:'讓巴(){返回someAsyncOperation(); }' –

+0

@FelixKling我更新了我的帖子,希望澄清我的問題。我不想從getter返回一個函數。我希望返回值來自異步操作。 – Enki

+0

是的,'返回someAsyncOperation();'返回'someAsyncOperation'返回的承諾。它不返回一個函數(是什麼讓你覺得呢?) –

回答

11

只能await承諾,async函數將返回自己的承諾。
當然,吸氣劑也可以產生這樣的承諾,與正常值沒有區別。

13

你可以做到這一點

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

這又是一樣的

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