RxJava'da Gözlemlenebilir, Tamamlanabilir ve Tek arasındaki fark nedir


113

RxJava'da Gözlemlenebilir, Tamamlanabilir ve Tekli arasındaki farkı açık örneklerle açıklayabilir misiniz?

Hangi senaryoda birini diğerlerine göre kullanıyoruz?


Herhangi bir şey deneyimledin mi?
J. Chomel

Yakın zamanda başladım .. @ J.Chomel
Raja Jawahar

25
Bu tamamen geçerli bir sorudur ve kapatılmaması gerekirdi. Rx harika bir kitaplık olmasına rağmen, belgeler ve örnekler maalesef son derece zayıf ve kafa karıştırıcı.
RunLoop

Yanıtlar:


248

Observablezaman içinde değerleri yayan olay kaynağının genel ReactiveX yapı taşıdır. (ve böylece ReactiveX genişletilmiş her dilde mevcuttur)
Kısaca Gözlemlenebilir olaylar şunlardır:
onNext * (onCompleted | onError)? / (* sıfır veya daha fazla? - sıfır veya 1)

Singleve Completableyalnızca RxJava'da sunulan ve Observabledaha kısa API'ye sahip olan azaltılmış türleri temsil eden yeni türlerdir .

Singletemsil Observablebu yayarlar tek bir değer veya hata.

Completabletemsil eder Observable, bu yaydığı herhangi bir değer, ancak uç olaylar ya onErrorveyaonCompleted

Geri dönen bir yöntemin farklılıkları gibi farklılıkları düşünebilirsiniz:

  • Nesnelerin Toplanması - Gözlenebilir

  • Tek nesne - Tek

  • ve değer döndürmeyen yöntem (void yöntemi) - Tamamlanabilir.

SingleGörev odaklı Gözlemlenebilir'e sahip olduğunuzda ve bir kez gerçekleştirilen Ağ isteği ve dönüş değeri (veya hata) gibi tek bir değer beklediğinizde uygun olabilir, ağ çağrısı tek seferde çalıştırılır, yani ek değerler döndürmesini beklemiyorsunuz mesai. Diğer bir örnek, DB getirme veri işlemidir.

CompletableBiriniz olduğunda Observableve operasyondan kaynaklanan değeri önemsemediğinizde veya hiç yoksa uygundur. Örnekler bir önbelleğin güncellenmesidir, işlem ya başarılı / başarısız olabilir, ancak değer yoktur.
Başka bir örnek, hiçbir şey döndürmeyen bazı uzun süreli başlatma işlemidir. Yalnızca başarı göstergesiyle sonuçlanan UPDATE / PUT ağ çağrısı olabilir.

Her durumda, Completable ve Single yeni yetenekler eklemiyorlar, ancak API'nin açığa çıkardığı Observable'ın arkasındaki işlemler hakkında daha fazla bilgi veren daha sağlam ve kısa API'ler sunuyorlar.

Düzenle:

RxJava2 Maybe:

RxJava2 olarak adlandırılan yeni bir tür ilave Maybe, Maybekombinasyonu Completableve tek.

Yukarıdaki gibi aynı dilde , bir türden Maybedönen bir yöntem olarak düşünülebilir, Object çevresinde bir değer olup olmadığını açıkça söyleyen bir sarmalayıcıdır (boş yerine). İle ya tam olarak benzer bir değere sahip olabiliriz ya da hiçbir şey döndürmeyebiliriz - tıpkı gibi . Ek olarak, her ikisi gibi bizde de hata var. bir değere sahip olmayabileceğini ve sadece tamamlayacağını işaretlemek istediğimizde değerlidir . Önbellekten bir örnek alınacak, önbellekte mutlaka bir değerimiz olmayacak, bu yüzden bu durumda, önbellekteki değeri alacağımız için tamamlayacağız . Bu aynı zamanda RxJava2 ile bir akıştaki boş olmayan değerleri işlemeye değer.OptionalOptionalObject
MaybeSingleCompletable
MaybeObservable
onNext

RxJava2 Flowable:

İlk önce, geri basıncı tanımlayalım. Geri basınç, verilerin işlenebileceğinden daha hızlı üretildiği durumu ele almanın bir yoludur. Flowablegeri basınç desteğine sahiptir ve aşağı akımın ürün talep etmesine izin verir. Sen farklar hakkında daha fazla bilgi bulabilirsiniz burada .


2
Akıcı ne olacak?
Niraj Chauhan

Öyleyse Kotlin'de yazıyorsam Maybe<T>, esasen öyle Single<T?>mi?
AAverin

Dikkate Can Singlebir olmak Completabledöndü değerle?
Eido95

13
  1. Akıcı ve Gözlenebilir , sonlu veya sonsuz akışları temsil edebilir. Akıcı destek geri basıncı .
  2. Tek , tek bir öğeye sahip akışlardır.
  3. Belki 0 veya bir öğeli akışlardır.
  4. Son olarak, Tamamlanabilir , öğesi olmayan bir akışı temsil eder, yani yalnızca değer olmadan tamamlanabilir veya başarısız olabilir.

Burada RXJava bölümünde bulduğum kısa bir cevap .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.