2015-11-23 19 views
15

Có hoặc nó sẽ có thể có một lớp ES6 getter trả về một giá trị từ một ES2017 chờ đợi/async chức năng.(ES6) lớp (ES2017) không đồng bộ/đang chờ 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

Đây là tất cả các bạn cần: 'get bar() {return someAsyncOperation(); } ' –

+0

@FelixKling Tôi đã cập nhật bài đăng của mình để hy vọng làm rõ câu hỏi của tôi. Tôi không cố gắng trả lại một hàm từ getter. Tôi muốn giá trị trả về đến từ một hoạt động không đồng bộ. – Enki

+0

Có, 'return someAsyncOperation();' trả về lời hứa rằng 'someAsyncOperation' trả về. Nó không trả về một hàm (điều gì khiến bạn nghĩ vậy?) –

Trả lời

11

Bạn chỉ có thể await hứa hẹn và các chức năng async sẽ tự trả lại lời hứa.
Tất nhiên, người thu gom cũng có thể mang lại lời hứa như vậy, không có sự khác biệt so với giá trị bình thường.

13

Bạn có thể làm điều này

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

mà lại là giống như

class Foo { 
    get bar() { 
     return new Promise((resolve, reject) => { 
      someAsyncOperation().then(result => { 
       resolve(result); 
      }); 
     }) 
    } 
} 
Các vấn đề liên quan