Sự khác biệt giữa Có thể quan sát, Có thể hoàn thành và Đơn trong RxJava là gì


113

Bất cứ ai có thể vui lòng giải thích sự khác biệt giữa Có thể quan sát, Có thể hoàn thành và Đơn trong RxJava với các ví dụ rõ ràng?

Trong trường hợp nào chúng tôi sử dụng một trong những tình huống khác?


Bạn đã có kinh nghiệm gì chưa?
J. Chomel

Tôi mới bắt đầu gần đây .. @ J.Chomel
Raja Jawahar.

25
Đây là một câu hỏi hoàn toàn hợp lệ và đáng lẽ không nên đóng lại. Mặc dù rx là một thư viện tuyệt vời, nhưng không may là tài liệu và ví dụ lại cực kỳ nghèo nàn và khó hiểu.
RunLoop

Câu trả lời:


248

Observablelà khối xây dựng ReactiveX chung, của nguồn sự kiện phát ra các giá trị theo thời gian. (và do đó tồn tại trong mọi ngôn ngữ ReactiveX được mở rộng đến)
trong các sự kiện có thể quan sát ngắn gọn là:
onNext * (onCompleted | onError)? / (* không hoặc nhiều hơn? - không hoặc 1)

SingleCompletablelà các loại mới được giới thiệu độc quyền tại RxJava đại diện cho các loạiObservable , có API ngắn gọn hơn.

Single đại diện Observable giá trị hoặc lỗi phát ra đơn lẻ.

Completable đại diện Observable rằng không phát ra giá trị, mà chỉ phát ra các sự kiện đầu cuối, onErrorhoặconCompleted

Bạn có thể nghĩ về sự khác biệt như sự khác biệt của một phương thức trả về:

  • Bộ sưu tập các đối tượng - Có thể quan sát

  • Đối tượng đơn - Đơn

  • và phương thức không trả về giá trị nào (phương thức void) - Hoàn thành.

Singlecó thể phù hợp khi bạn có định hướng tác vụ là Observable và bạn mong đợi một giá trị duy nhất, như Yêu cầu mạng được thực hiện một lần và trả về giá trị (hoặc lỗi), cuộc gọi mạng được vận hành theo kiểu một lần, có nghĩa là bạn không mong đợi nó trả về các giá trị bổ sung tăng ca. Một ví dụ khác là thao tác tìm nạp dữ liệu DB.

Completablethích hợp khi bạn có một Observable và bạn không quan tâm đến giá trị kết quả từ hoạt động hoặc không có bất kỳ giá trị nào. Ví dụ như cập nhật bộ đệm chẳng hạn, hoạt động có thể thành công / thất bại, nhưng không có giá trị.
Một ví dụ khác là một số hoạt động init đang chạy lâu mà không trả về bất kỳ thứ gì. Nó có thể là UPDATE / PUT cuộc gọi mạng chỉ dẫn đến chỉ báo thành công.

Trong mọi trường hợp, Completable và Single không thêm các khả năng mới nhưng chúng đang giới thiệu các API ngắn gọn và mạnh mẽ hơn, cho biết thêm về các hoạt động đằng sau Observable mà API đã tiếp xúc.

Biên tập:

RxJava2 Maybe :

RxJava2 đã thêm một kiểu mới được gọi là Maybe,Maybe là sự kết hợp của Completablevà Single.

Trong cùng một ngôn ngữ như trên, Maybecó thể được coi như một phương thức trả về Optionalmột kiểu nào đó, Optionallà một trình bao bọc xung quanh Đối tượng cho biết rõ ràng liệu chúng ta có một số giá trị trong đó Objecthay không (thay vì null).
Với Maybechúng ta có thể có một số giá trị giống hệt như Singlehoặc không trả lại gì - giống như Completable. Ngoài ra, giống như cả hai, chúng tôi có lỗi.
Maybecó giá trị khi chúng ta muốn đánh dấu rằng một Observablecó thể không có giá trị và sẽ chỉ hoàn thành.
Một ví dụ sẽ được tìm nạp từ bộ nhớ cache, chúng tôi không nhất thiết phải có giá trị trong bộ nhớ cache, vì vậy trong trường hợp này, chúng tôi sẽ hoàn thành, vì chúng tôi sẽ nhận được onNextgiá trị từ bộ nhớ cache.
Điều này cũng xứng đáng để xử lý các giá trị không phải null trong một luồng với RxJava2.

RxJava2Flowable :

Đầu tiên, hãy xác định áp suất ngược. Áp suất ngược là một phương tiện xử lý tình huống dữ liệu được tạo ra nhanh hơn mức có thể được xử lý. Flowablecó hỗ trợ áp suất ngược cho phép hạ nguồn để yêu cầu các mặt hàng. Bạn có thể đọc thêm về sự khác biệt ở đây .


2
Điều gì về lưu lượng?
Niraj Chauhan

Vì vậy, nếu tôi đang viết bằng Kotlin Maybe<T>, về cơ bản Single<T?>,?
AAverin

Bạn có thể coi Singlelà một Completablevới giá trị trả về không?
Eido95

13
  1. FlowableObservable có thể đại diện cho các luồng hữu hạn hoặc vô hạn. Hỗ trợ áp suất ngược dòng chảy .
  2. Đơn là các luồng có một phần tử duy nhất.
  3. Có lẽ là các luồng có 0 hoặc một phần tử.
  4. Cuối cùng một Completable đại diện cho một dòng không có các yếu tố, tức là nó chỉ có thể trọn vẹn nếu thiếu một giá trị hoặc thất bại.

Một câu trả lời ngắn gọn mà tôi tìm thấy ở đây trên phần RXJava.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.