Lời hứa cung cấp một cơ chế gọi lại rất đơn giản, trong đó Rx cung cấp khả năng trừu tượng hóa mạnh mẽ . An Observable thể hiện luồng dữ liệu, sau đó chúng tôi có thể áp dụng toán tử để xác định cách xử lý dữ liệu đến.
Nếu tất cả những gì bạn cần làm là thực hiện yêu cầu HTTP và sau đó cập nhật thành phần giao diện người dùng, sau đó sử dụng Lời hứa có thể đủ.
Tuy nhiên, hầu hết các ứng dụng có xu hướng có nhiều nhu cầu phức tạp hơn (ngay cả khi không rõ ràng ở lần đầu tiên).Lấy yêu cầu HTTP của chúng tôi, ví dụ, hãy xem cách mô hình hóa nó như một Quan sát và sử dụng một số toán tử Rx có thể giúp chúng tôi:
-Nếu yêu cầu HTTP được kích hoạt bởi hành động của người dùng, chúng tôi có thể muốn cảnh giác tắt nhiều yêu cầu HTTP (hãy tưởng tượng người dùng nhập vào hộp tìm kiếm). Chúng tôi không muốn kích hoạt yêu cầu cho mọi lần nhấn phím, vì vậy chúng tôi có thể muốn Điều chỉnh tìm kiếm của chúng tôi để chúng tôi chỉ kích hoạt yêu cầu nếu người dùng ngừng nhập 300ms. Hơn nữa, nếu người dùng nhập một từ, đợi 300ms và thêm một ký tự khác, chúng tôi sẽ kích hoạt yêu cầu HTTP tiếp theo. Với lời hứa, chúng tôi có thể gặp phải tình trạng đua xe vì chúng tôi không thể kiểm soát thứ tự mà chúng tôi sẽ nhận được phản hồi và chúng tôi không thể hủy yêu cầu cũ. Rx giải quyết vấn đề này bằng cách cho phép chúng tôi Chuyển đổi giữa các luồng, gọi Vứt bỏ trên các đăng ký yêu cầu cũ mà chúng tôi không còn quan tâm. Chúng tôi cũng có thể lọc ra bất kỳ đầu vào tìm kiếm không hợp lệ nào, ví dụ: Trong đó cụm từ tìm kiếm có độ dài nhỏ hơn 3 ký tự.
-Hỗ trợ để xử lý Thời gian chờ/Xử lý lỗi. Giả sử yêu cầu HTTP của chúng tôi không thành công, Rx cho phép chúng tôi dễ dàng Thử lại thực hiện yêu cầu.
-Hãy nói rằng một số phần trong ứng dụng của chúng tôi cần thực hiện cuộc gọi HTTP giống nhau, có thể chúng tôi không thực sự muốn thực hiện cuộc gọi nhiều lần. Chúng tôi có thể phơi bày mối quan hệ của chúng tôi với nhiều người tiêu dùng và sử dụng Phát lại để đảm bảo cuộc gọi được thực hiện một lần và kết quả được lưu vào bộ nhớ cache cho người đăng ký tiếp theo. Chúng tôi thậm chí có thể cung cấp một TimeSpan để phát lại, cho chúng ta hành vi bộ nhớ cache hết hạn.
-Thực hiện rõ ràng hơn về luồng thông qua việc sử dụng Trình lập lịch biểu, cho phép chúng tôi kiểm soát đồng thời. Thậm chí tốt hơn, chúng tôi có thể sử dụng Kiểm tra lịch biểu trong Bài kiểm tra đơn vị của chúng tôi để kiểm soát thời gian, cho phép chúng tôi mô phỏng Thời gian chờ, điều kiện chủng tộc, v.v.
Đây là một số ví dụ nhanh để chứng minh điều gì có thể. Có rất nhiều toán tử trong khuôn khổ Rx để phục vụ cho tất cả các kiểu kịch bản và tính tương thích của Rx có nghĩa là bạn có thể dễ dàng kết hợp các toán tử để xác định hành vi bạn cần. Cũng dễ dàng tạo các toán tử tái sử dụng của riêng bạn (ví dụ: RetryAfterDelay).
Tóm lại, Rx có thể làm mọi thứ hơn Promises có thể làm, và xa hơn nhiều. Tôi nghi ngờ trong vài năm tới sẽ có một sự thay đổi liên tục đối với Rx thay vì Promises.
Để đọc thêm, tôi khuyên bạn nên xem phần trên Đài quan sát trong Angular 2 guide.
Bạn nhớ chia sẻ một nguồn ở đâu bạn đọc cái này Cá nhân tôi chưa bao giờ nghe nói về các quan sát khác ngoài 'Object.observe' đã bị xóa khỏi thông số kỹ thuật và không liên quan gì đến Lời hứa – nem035
Hoặc bạn đang nói về [Proxy] (https://developer.mozilla.org/vi -US/docs/Web/JavaScript/Tham chiếu/Global_Objects/Proxy)? – JCOC611
Hứa hẹn: giá trị duy nhất, không đồng bộ. Có thể quan sát: bộ sưu tập, không đồng bộ. Xem http://reactivex.io/intro.html để triển khai đề xuất Quan sát được. –