Czy ktoś mógłby wyjaśnić różnicę między Observable, Completable i Single w RxJava z jasnymi przykładami?
W którym scenariuszu używamy jednego nad innymi?
Czy ktoś mógłby wyjaśnić różnicę między Observable, Completable i Single w RxJava z jasnymi przykładami?
W którym scenariuszu używamy jednego nad innymi?
Odpowiedzi:
Observable
jest ogólnym blokiem konstrukcyjnym ReactiveX źródła zdarzeń, które emituje wartości w czasie. (i dlatego istnieje w każdym języku, do którego rozszerzono ReactiveX)
w skrócie Zdarzenia obserwowalne to:
onNext * (onCompleted | onError)? / (* zero lub więcej? - zero lub 1)
Single
i Completable
są nowymi typami wprowadzonymi wyłącznie w RxJava, które reprezentują zredukowane typy Observable
, które mają bardziej zwięzłe API.
Single
reprezentują, Observable
że emitują pojedynczą wartość lub błąd.
Completable
reprezentują, Observable
że nie emituje żadnej wartości, a jedynie zdarzenia końcowe, albo onError
lubonCompleted
Możesz myśleć o różnicach, takich jak różnice w zwracanej metodzie:
Zbiór obiektów - obserwowalny
Pojedynczy obiekt - pojedynczy
i metoda, która nie zwraca żadnych wartości (metoda void) - Completable.
Single
może być odpowiednie, gdy masz Observable zorientowane na zadania i oczekujesz pojedynczej wartości, takiej jak żądanie sieciowe, które jest wykonywane raz i zwraca wartość (lub błąd), połączenie sieciowe jest obsługiwane jednorazowo, co oznacza, że nie oczekujesz, że zwróci dodatkowe wartości z biegiem czasu. Innym przykładem jest operacja pobierania danych z bazy danych.
Completable
jest odpowiedni, gdy masz Observable
i nie dbasz o wartość wynikającą z operacji lub nie ma żadnej. Przykładami są na przykład aktualizowanie pamięci podręcznej, operacja może się powieść / zakończyć, ale nie ma wartości.
Innym przykładem jest długa operacja init, która nic nie zwraca. Może to być wywołanie sieciowe UPDATE / PUT, które zakończyło się tylko wskazaniem sukcesu.
W każdym razie Completable i Single nie dodają nowych możliwości, ale wprowadzają bardziej niezawodne i zwięzłe interfejsy API, które mówią więcej o operacjach za Observable, które ujawnił interfejs API.
Edytować:
Maybe
:RxJava2 dodał nowy typ o nazwie Maybe
, Maybe
jest połączeniem Completable
i Single.
W tym samym języku, co powyżej, Maybe
może być traktowany jako metoda zwracająca
Optional
pewien typ, Optional
jest opakowaniem wokół Object, które wyraźnie mówi, czy mamy w nim jakąś wartość - Object
czy nie (zamiast null).
Z Maybe
możemy albo mieć jakąś wartość dokładnie taką, jak Single
lub nic nie zwracać - tak jak Completable
. Dodatkowo, podobnie jak obaj, mamy błąd.
Maybe
jest cenny, gdy chcemy zaznaczyć, że Observable
może nie mieć wartości i po prostu się zakończy.
Przykład zostanie pobrany z pamięci podręcznej, niekoniecznie będziemy mieć wartość w pamięci podręcznej, więc w tym przypadku zakończymy, a więc otrzymamy onNext
wartość z pamięci podręcznej.
Jest to również warte obsługi wartości innych niż null w strumieniu z RxJava2.
Flowable
:Najpierw zdefiniujmy przeciwciśnienie. Przeciwciśnienie jest sposobem radzenia sobie z sytuacją, w której dane są generowane szybciej, niż można je przetworzyć. Flowable
posiada wsparcie dla przeciwciśnienia, umożliwiające dalszy przepływ zamówień. Możesz przeczytać więcej o różnicach tutaj .
Maybe<T>
w zasadzie Single<T?>
?
Single
że jest to Completable
zwracana wartość?
Zwięzłą odpowiedź znalazłem tutaj w dziale RXJava.