To jest całkowicie uzasadnione pytanie i nie powinno być zamykane. Chociaż rx to świetna biblioteka, dokumentacja i przykłady są niestety bardzo ubogie i zagmatwane.
RunLoop
Odpowiedzi:
248
Observablejest 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)
Singlei Completablesą nowymi typami wprowadzonymi wyłącznie w RxJava, które reprezentują zredukowane typy Observable, które mają bardziej zwięzłe API.
Singlereprezentują, Observableże emitują pojedynczą wartość lub błąd.
Completablereprezentują, Observableże nie emituje żadnej wartości, a jedynie zdarzenia końcowe, albo onErrorlubonCompleted
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.
Singlemoż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.
Completablejest odpowiedni, gdy masz Observablei 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ć:
RxJava2 Maybe:
RxJava2 dodał nowy typ o nazwie Maybe, Maybejest połączeniem Completablei Single.
W tym samym języku, co powyżej, Maybemoże być traktowany jako metoda zwracająca
Optionalpewien typ, Optionaljest opakowaniem wokół Object, które wyraźnie mówi, czy mamy w nim jakąś wartość - Objectczy nie (zamiast null).
Z Maybemożemy albo mieć jakąś wartość dokładnie taką, jak Singlelub nic nie zwracać - tak jak Completable. Dodatkowo, podobnie jak obaj, mamy błąd. Maybejest cenny, gdy chcemy zaznaczyć, że Observablemoż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 onNextwartość z pamięci podręcznej.
Jest to również warte obsługi wartości innych niż null w strumieniu z RxJava2.
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ć. Flowableposiada wsparcie dla przeciwciśnienia, umożliwiające dalszy przepływ zamówień. Możesz przeczytać więcej o różnicach tutaj .
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
iCompletable
są nowymi typami wprowadzonymi wyłącznie w RxJava, które reprezentują zredukowane typyObservable
, 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, alboonError
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 maszObservable
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ć:
RxJava2
Maybe
:RxJava2 dodał nowy typ o nazwie
Maybe
,Maybe
jest połączeniemCompletable
i Single.W tym samym języku, co powyżej,
Maybe
może być traktowany jako metoda zwracającaOptional
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ą, jakSingle
lub nic nie zwracać - tak jakCompletable
. Dodatkowo, podobnie jak obaj, mamy błąd.Maybe
jest cenny, gdy chcemy zaznaczyć, żeObservable
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.
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 .źródło
Maybe<T>
w zasadzieSingle<T?>
?Single
że jest toCompletable
zwracana wartość?Zwięzłą odpowiedź znalazłem tutaj w dziale RXJava.
źródło