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 .
Jawaban:
Observable
adalah 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)
Single
danCompletable
merupakan tipe baru yang diperkenalkan secara eksklusif di RxJava yang mewakili tipe tereduksiObservable
, yang memiliki API lebih ringkas.Single
mewakiliObservable
yang memancarkan nilai tunggal atau kesalahan.Completable
menyatakanObservable
bahwa tidak memancarkan nilai, tetapi hanya kejadian terminal, baikonError
atauonCompleted
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.
Single
dapat 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.Completable
sesuai jika Anda memilikiObservable
dan 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
,Maybe
adalah kombinasi dariCompletable
dan Tunggal.Dalam bahasa yang sama seperti di atas,
Maybe
dapat dianggap sebagai metode yang mengembalikanOptional
beberapa jenis,Optional
adalah pembungkus di sekitar Objek yang secara eksplisit memberi tahu apakah kita memiliki beberapa nilai di dalamnya -Object
atau tidak (bukan null).Dengan
Maybe
kita dapat memiliki beberapa nilai persis sepertiSingle
atau tidak mengembalikan apa-apa - sama sepertiCompletable
. Selain itu, seperti keduanya, kami mengalami kesalahan.Maybe
bernilai ketika kita ingin menandai bahwa suatuObservable
mungkin 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
onNext
nilai 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.
Flowable
memiliki dukungan backpressure yang memungkinkan downstream untuk meminta item. Anda dapat membaca lebih lanjut tentang perbedaannya di sini .sumber
Maybe<T>
pada dasarnyaSingle<T?>
?Single
untuk menjadiCompletable
dengan nilai yang dikembalikan?Jawaban singkat yang saya temukan di sini di bagian RXJava.
sumber