¿Alguien puede explicar la diferencia entre Observable, Completable y Single en RxJava con ejemplos claros?
¿En qué escenario usamos uno sobre los demás?
¿Alguien puede explicar la diferencia entre Observable, Completable y Single en RxJava con ejemplos claros?
¿En qué escenario usamos uno sobre los demás?
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
y Completable
son nuevos tipos introducidos exclusivamente en RxJava que representan tipos reducidos de Observable
, que tienen una API más concisa.
Single
representan Observable
que emiten valor único o error.
Completable
representan Observable
que no emite ningún valor, sino solo eventos terminales, ya sea onError
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 un Observable
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:
Maybe
:RxJava2 agregó un nuevo tipo llamado Maybe
, Maybe
es la combinación de Completable
y Single.
En el mismo lenguaje que el anterior, Maybe
se puede pensar como un método que devuelve
Optional
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 igual Single
o no devolver nada, igual que Completable
. Además, como ambos, tenemos el error.
Maybe
es valioso cuando queremos marcar que un Observable
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.
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í .
Maybe<T>
, esencialmente Single<T?>
,?
Single
un Completable
valor devuelto?
Una respuesta concisa que encontré aquí en la sección RXJava.