Apa perbedaan antara Observable, Completable dan Single di RxJava


113

Adakah yang bisa menjelaskan perbedaan antara Observable, Completable dan Single di RxJava dengan contoh yang jelas?

Dalam skenario mana kita menggunakan salah satu dari yang lain?


Apakah Anda pernah mengalami sesuatu?
J. Chomel

Saya baru saja mulai baru-baru ini .. @ J.Chomel
Raja Jawahar

25
Ini adalah pertanyaan yang sangat valid dan seharusnya tidak ditutup. Meskipun rx adalah pustaka yang bagus, dokumentasi dan contoh sayangnya sangat buruk dan membingungkan.
RunLoop

Jawaban:


248

Observableadalah blok penyusun ReactiveX generik, dari sumber peristiwa yang memancarkan nilai dari waktu ke waktu. (dan dengan demikian ada di setiap bahasa yang diperluas ReactiveX ke)
dalam peristiwa singkat yang dapat diamati adalah:
onNext * (onCompleted | onError)? / (* nol atau lebih? - nol atau 1)

Singledan Completablemerupakan tipe baru yang diperkenalkan secara eksklusif di RxJava yang mewakili tipe tereduksi Observable, yang memiliki API lebih ringkas.

Singlemewakili Observableyang memancarkan nilai tunggal atau kesalahan.

Completablemenyatakan Observablebahwa tidak memancarkan nilai, tetapi hanya kejadian terminal, baik onErroratauonCompleted

Anda dapat memikirkan perbedaan seperti perbedaan metode yang mengembalikan:

  • Koleksi Objek - Dapat diamati

  • Objek tunggal - Tunggal

  • dan metode yang tidak mengembalikan nilai (metode kosong) - Dapat diselesaikan.

Singledapat sesuai ketika Anda memiliki berorientasi tugas Dapat diamati dan Anda mengharapkan nilai tunggal, seperti permintaan Jaringan yang dilakukan sekali dan mengembalikan nilai (atau kesalahan), panggilan jaringan dioperasikan dalam mode satu waktu, yang berarti Anda tidak mengharapkannya untuk mengembalikan nilai tambahan lembur. Contoh lainnya adalah operasi data pengambilan DB.

Completablesesuai jika Anda memiliki Observabledan tidak peduli dengan nilai yang dihasilkan dari operasi tersebut, atau tidak ada. Contohnya adalah memperbarui cache misalnya, operasi bisa berhasil / gagal, tetapi tidak ada nilai.
Contoh lain adalah beberapa operasi init yang berjalan lama yang tidak mengembalikan apa pun. Ini bisa berupa panggilan jaringan UPDATE / PUT yang dihasilkan dengan indikasi keberhasilan saja.

Bagaimanapun, Completable dan Single tidak menambahkan kemampuan baru tetapi mereka memperkenalkan API yang lebih kuat dan ringkas, yang memberi tahu lebih banyak tentang operasi di balik Observable yang diekspos oleh API.

Edit:

RxJava2 Maybe:

RxJava2 menambahkan tipe baru yang disebut Maybe, Maybeadalah kombinasi dari Completabledan Tunggal.

Dalam bahasa yang sama seperti di atas, Maybedapat dianggap sebagai metode yang mengembalikan Optionalbeberapa jenis, Optionaladalah pembungkus di sekitar Objek yang secara eksplisit memberi tahu apakah kita memiliki beberapa nilai di dalamnya - Objectatau tidak (bukan null).
Dengan Maybekita dapat memiliki beberapa nilai persis seperti Singleatau tidak mengembalikan apa-apa - sama seperti Completable. Selain itu, seperti keduanya, kami mengalami kesalahan.
Maybebernilai ketika kita ingin menandai bahwa suatu Observablemungkin tidak memiliki nilai dan hanya akan selesai.
Contoh akan diambil dari cache, kita belum tentu memiliki nilai di cache, jadi dalam hal ini, kita akan menyelesaikannya, sekarang kita akan mendapatkan onNextnilai dari cache.
Ini juga layak untuk menangani nilai non-null dalam streaming dengan RxJava2.

RxJava2 Flowable:

Pertama, mari kita definisikan tekanan balik. Backpressure adalah cara menangani situasi di mana data dihasilkan lebih cepat daripada pemrosesannya. Flowablememiliki dukungan backpressure yang memungkinkan downstream untuk meminta item. Anda dapat membaca lebih lanjut tentang perbedaannya di sini .


2
Bagaimana dengan flowable?
Niraj Chauhan

Jadi, jika saya menulis di Kotlin, apakah Maybe<T>pada dasarnya Single<T?>?
AAverin

Bisakah Anda mempertimbangkan Singleuntuk menjadi Completabledengan nilai yang dikembalikan?
Eido95

13
  1. Flowable dan Observable dapat mewakili aliran terbatas atau tak terbatas. Dukungan tekanan balik yang dapat mengalir .
  2. Tunggal adalah aliran dengan satu elemen.
  3. Mungkin aliran dengan 0 atau satu elemen.
  4. Terakhir, Completable mewakili aliran tanpa elemen, yaitu hanya dapat diselesaikan tanpa nilai atau gagal.

Jawaban singkat yang saya temukan di sini di bagian RXJava.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.