2015-09-29 17 views
9

Bây giờ ES6 là tiêu chuẩn chính thức trong Node 4.x, bạn sử dụng Promises như thế nào? Mô-đun (ví dụ: mô-đun fs gốc) có tự động làm việc với Lời hứa không? Hoặc mô-đun phải được viết cụ thể để làm việc với Promises? Làm thế nào để bạn biết những gì bạn có thể sử dụng một Promise với và những gì bạn có thể không?Làm thế nào để sử dụng lời hứa trong nút 4.x?

Đã có rất nhiều triển khai Promise khác nhau (Q, Bluebird, v.v.) mà tôi đang nhầm lẫn về nơi bắt đầu với lời hứa gốc trong nút 4.x.

+4

Tôi _promise_, bạn chắc chắn sẽ nhận được câu trả lời sớm :) – Tushar

+0

Tôi biết không có mô-đun node.js tích hợp nào trả về lời hứa cho các hoạt động không đồng bộ của họ. Họ vẫn sử dụng cùng một cuộc gọi lại mà họ luôn sử dụng. Những gì bạn có thể làm là "khuyến khích" bất kỳ ai trong số các giao diện này để thực hiện các hàm trả về các lời hứa từ quy ước gọi điện thoại async chuẩn của node.js. Trong thực tế, sử dụng những thứ như 'Promisify.promisifyAll()' của Bluebird, bạn có thể quảng bá toàn bộ một mô-đun tại thời gian 'require()' như thế này 'var fs = Promise.promisifyAll (require (" fs "));' và sau đó mỗi chức năng trong mô-đun đó có phiên bản lời hứa mới. Rất hữu dụng. – jfriend00

Trả lời

16

bạn sử dụng lời hứa như thế nào?

Bạn có thể sử dụng lời hứa "gốc" bằng cách sử dụng hàm tạo mới, Hứa hẹn. Bạn có thể tìm thấy thông tin cơ bản về API over on MDN và nghiên cứu sâu về Promises can be found on HTML5Rocks.

Mô-đun (ví dụ mô-đun fs gốc) có tự động làm việc với Lời hứa không?

Chúng không, nhưng it's not so difficult to make a wrapper. Tất nhiên, làm điều này cho toàn bộ API Node có thể hơi tẻ nhạt.

Một trong những nhận xét trong OP đề cập đến Bluebird's PromisifyAll, có vẻ như một cách kỳ diệu để chuyển đổi toàn bộ mô-đun để sử dụng Lời hứa. Nifty!

Tôi mong đợi một số API hứa hẹn trong các phiên bản sắp tới của Nút, nhưng tôi không chắc chắn về điều này. Có thể có một vấn đề hoặc thảo luận ở đâu đó xung quanh điều này ... có lẽ trên dự án io.js. Tôi sẽ điều tra và cập nhật điều này nếu tôi tìm thấy bất cứ điều gì.

Vì sao chúng tôi có lời hứa API kiểu gọi lại? Đó có thể là do thực tế là việc thêm phụ gia dễ dàng hơn, thêm lời hứa, hơn là làm cho có thể phá vỡ các thay đổi API, như xóa các cuộc gọi lại.

Hoặc mô-đun phải được viết cụ thể để làm việc với Lời hứa?

Chúng thực hiện.

Làm cách nào để biết bạn có thể sử dụng Lời hứa và những gì bạn không thể?

documentation luôn là nơi tốt nhất để tìm câu hỏi API. Tôi không biết bất cứ điều gì mà trả về Promises, nhưng tôi phải thừa nhận sử dụng một tập hợp con nhỏ của API Node trong ngày của tôi-to-ngày.

Đã có rất nhiều triển khai Promise khác nhau (Q, Bluebird, v.v.) mà tôi nhầm lẫn về nơi bắt đầu với lời hứa gốc trong nút 4.x.

Bạn có câu hỏi cụ thể nào về các triển khai khác nhau này không? Cách tôi nghĩ về nó là Promises bản địa là khá tối thiểu. Họ đủ tốt để làm cho mã không đồng bộ một chút sạch hơn, nhưng họ không có kiểu cách.Những thư viện khác mà bạn đề cập đến làm hai việc:

  1. Cung cấp một Polyfill cho các môi trường không hỗ trợ Promises mẹ đẻ
  2. add thay đổi mức độ tính năng ưa thích

Các trường hợp sử dụng đầu tiên là không còn cần thiết trong nút. Vì vậy, nó là một vấn đề của việc xác định nếu bạn muốn/cần bất kỳ những tính năng ưa thích.

Hãy cho tôi biết nếu câu trả lời này không thỏa đáng và tôi sẽ cố gắng cập nhật nó với nhiều thông tin hơn!

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