Esta es una pregunta perfectamente válida y no debería haberse cerrado. Aunque rx es una gran biblioteca, la documentación y los ejemplos son, lamentablemente, extremadamente pobres y confusos.
RunLoop
Respuestas:
248
Observablees el componente genérico de ReactiveX, de origen de eventos que emite valores a lo largo del tiempo. (y por lo tanto existe en todos los idiomas a los que se extendió ReactiveX)
en resumen Los eventos observables son:
onNext * (onCompleted | onError)? / (* ¿cero o más? - cero o 1)
Singley Completableson nuevos tipos introducidos exclusivamente en RxJava que representan tipos reducidos de Observable, que tienen una API más concisa.
Singlerepresentan Observableque emiten valor único o error.
Completablerepresentan Observableque no emite ningún valor, sino solo eventos terminales, ya sea onErroroonCompleted
Puede pensar en las diferencias como las diferencias de un método que devuelve:
Colección de objetos: observable
Objeto único - Soltero
y método que no devuelve valores (método vacío) - Completable.
Singlepuede ser apropiado cuando tiene Observable orientado a tareas y espera un valor único, como la solicitud de red que se realiza una vez y devuelve un valor (o error), la llamada de red se opera de una manera única, lo que significa que no espera que devuelva valores adicionales tiempo extraordinario. Otro ejemplo es la operación de obtención de datos de DB.
Completablees apropiado cuando tiene un Observabley no le importa el valor resultante de la operación, o no lo hay. Los ejemplos son actualizar un caché, por ejemplo, la operación puede tener éxito o fallar, pero no hay ningún valor.
Otro ejemplo es una operación init de larga ejecución que no devuelve nada. Puede ser una llamada de red UPDATE / PUT que resultó con indicación de éxito solamente.
En cualquier caso, Completable y Single no están agregando nuevas capacidades, pero están introduciendo API más robustas y concisas, que brindan más información sobre las operaciones detrás del Observable que la API expuso.
Editar:
RxJava2 Maybe:
RxJava2 agregó un nuevo tipo llamado Maybe, Maybees la combinación de Completabley Single.
En el mismo lenguaje que el anterior, Maybese puede pensar como un método que devuelve
Optionalalgún tipo, Optionales un envoltorio alrededor de Object que dice explícitamente si tenemos algún valor en él, Objecto no (en lugar de nulo).
Con Maybepodemos tener un valor exactamente igual Singleo no devolver nada, igual que Completable. Además, como ambos, tenemos el error. Maybees valioso cuando queremos marcar que un Observablepuede no tener un valor y simplemente se completará.
Se obtendría un ejemplo de la caché, no necesariamente tendremos un valor en la caché, por lo que en este caso, completaremos, ahora obtendremos onNextcon el valor de la caché.
Esto también es útil para manejar valores no nulos en una secuencia con RxJava2.
RxJava2 Flowable:
Primero, definamos la contrapresión. La contrapresión es un medio de manejar la situación en la que los datos se generan más rápido de lo que se pueden procesar. Flowabletiene soporte de contrapresión que permite que aguas abajo soliciten artículos. Puedes leer más sobre las diferencias aquí .
Respuestas:
Observable
es el componente genérico de ReactiveX, de origen de eventos que emite valores a lo largo del tiempo. (y por lo tanto existe en todos los idiomas a los que se extendió ReactiveX)en resumen Los eventos observables son:
onNext * (onCompleted | onError)? / (* ¿cero o más? - cero o 1)
Single
yCompletable
son nuevos tipos introducidos exclusivamente en RxJava que representan tipos reducidos deObservable
, que tienen una API más concisa.Single
representanObservable
que emiten valor único o error.Completable
representanObservable
que no emite ningún valor, sino solo eventos terminales, ya seaonError
oonCompleted
Puede pensar en las diferencias como las diferencias de un método que devuelve:
Colección de objetos: observable
Objeto único - Soltero
y método que no devuelve valores (método vacío) - Completable.
Single
puede ser apropiado cuando tiene Observable orientado a tareas y espera un valor único, como la solicitud de red que se realiza una vez y devuelve un valor (o error), la llamada de red se opera de una manera única, lo que significa que no espera que devuelva valores adicionales tiempo extraordinario. Otro ejemplo es la operación de obtención de datos de DB.Completable
es apropiado cuando tiene unObservable
y no le importa el valor resultante de la operación, o no lo hay. Los ejemplos son actualizar un caché, por ejemplo, la operación puede tener éxito o fallar, pero no hay ningún valor.Otro ejemplo es una operación init de larga ejecución que no devuelve nada. Puede ser una llamada de red UPDATE / PUT que resultó con indicación de éxito solamente.
En cualquier caso, Completable y Single no están agregando nuevas capacidades, pero están introduciendo API más robustas y concisas, que brindan más información sobre las operaciones detrás del Observable que la API expuso.
Editar:
RxJava2
Maybe
:RxJava2 agregó un nuevo tipo llamado
Maybe
,Maybe
es la combinación deCompletable
y Single.En el mismo lenguaje que el anterior,
Maybe
se puede pensar como un método que devuelveOptional
algún tipo,Optional
es un envoltorio alrededor de Object que dice explícitamente si tenemos algún valor en él,Object
o no (en lugar de nulo).Con
Maybe
podemos tener un valor exactamente igualSingle
o no devolver nada, igual queCompletable
. Además, como ambos, tenemos el error.Maybe
es valioso cuando queremos marcar que unObservable
puede no tener un valor y simplemente se completará.Se obtendría un ejemplo de la caché, no necesariamente tendremos un valor en la caché, por lo que en este caso, completaremos, ahora obtendremos
onNext
con el valor de la caché.Esto también es útil para manejar valores no nulos en una secuencia con RxJava2.
RxJava2
Flowable
:Primero, definamos la contrapresión. La contrapresión es un medio de manejar la situación en la que los datos se generan más rápido de lo que se pueden procesar.
Flowable
tiene soporte de contrapresión que permite que aguas abajo soliciten artículos. Puedes leer más sobre las diferencias aquí .fuente
Maybe<T>
, esencialmenteSingle<T?>
,?Single
unCompletable
valor devuelto?Una respuesta concisa que encontré aquí en la sección RXJava.
fuente