2015-07-08 18 views
12

Tôi bắt đầu sử dụng chức năng async/await ES7 trong các ứng dụng js của mình (được nhúng bởi Babel).ES2017 Các chức năng không đồng bộ/chờ đợi - chúng có chỉ hoạt động với lời hứa không?

Sửa lỗi nếu sai, nhưng chúng chỉ hoạt động với lời hứa? Nếu có, điều này có nghĩa rằng tôi cần phải bọc các hàm gọi lại thường xuyên vào Promises (những gì tôi hiện đang làm btw).

+0

Nó cũng hoạt động với thenables :-) – Bergi

+0

@Bergi là thenable một superset của lời hứa? Tôi chưa bao giờ coi chúng như những thực thể riêng biệt. – Mathletics

+0

@Bergi hứa hẹn :) – Kosmetika

Trả lời

9

hiện nay (và có khả năng cuối cùng) async/chờ đợi đề nghị đang chờ đợi lời hứa và desugars vào một cái gì đó giống như bluebird của Promise.coroutine với await đóng vai yield.

Điều này có ý nghĩa, như lời hứa đại diện cho một giá trị + thời gian và bạn đang chờ đợi giá trị đó có sẵn. Lưu ý await cũng chờ lời hứa như cấu trúc trong tất cả các ngôn ngữ khác bao gồm nó như C# hoặc Python (3,5+).

Lưu ý rằng việc chuyển đổi API gọi lại thành lời hứa rất dễ dàng và một số thư viện cung cấp các công cụ để thực hiện điều đó trong một lệnh. Xem How to convert an existing callback API to promises để biết thêm chi tiết.

+0

Vâng, tôi đồng ý rằng việc chuyển đổi dễ dàng, sự nhầm lẫn của tôi là do xem - http://stackoverflow.com/questions/31294521/es7-async-await-functions-do -they-work-only-with-promise/31294633 # comment50580127_31294633 – Kosmetika

1

Có, bạn await một lời hứa.

async function myFunction() { 
    let result = await somethingThatReturnsAPromise(); 
    console.log(result); // cool, we have a result 
} 

http://pouchdb.com/2015/03/05/taming-the-async-beast-with-es7.html

+0

Tôi chỉ nhận thấy rằng nếu bạn đang sử dụng yêu cầu https://github.com/request/request và làm 'await request.get ('url')' nó sẽ trả về nội dung phản hồi. Nó có nghĩa là yêu cầu các phương thức lib không chỉ dựa trên callback? – Kosmetika

+0

@Kosmetika bạn không thể chờ thư viện yêu cầu trực tiếp, nhưng bạn có thể dễ dàng 'promisifyAll' nó và sử dụng nó với lời hứa với chi phí hoạt động rất thấp. –

+0

@ BenjaminGruenbaum nhưng nó đang chờ đợi mà không có sự hứa hẹn gây ra sự nhầm lẫn của tôi! – Kosmetika

Các vấn đề liên quan