rxjava create java reactivex

java - create - reactivex



Diferencia entre Observable.defer y Observable.create en java rx (2)

¿Puede alguien explicarme la diferencia entre defer y create métodos en Observable ? No pude entender cuándo debería usar defer y cuándo debería usar create ...

Referencias

Deferir: http://reactivex.io/documentation/operators/defer.html

Crear: http://reactivex.io/documentation/operators/create.html

Gracias


Así que la distinción parece ser: la defer es buena cuando ya tienes algo que crea / devuelve un observable, pero no quieres que ese proceso suceda hasta la suscripción.

create es bueno cuando necesita envolver manualmente un proceso asíncrono y crear un observable. Esa creación también se aplaza hasta la suscripción.

Para decirlo de otra manera:

defer es un operador que permite la composición diferida de secuencias observables.

create es una implementación personalizada de una secuencia observable (donde la creación se aplaza hasta la suscripción).

Por lo tanto, si tiene una situación en la que puede usar just para crear un Observable partir de algunos resultados / valor o si tiene una capa de API de red que devuelve un Observable de la solicitud, pero no desea que la solicitud se inicie hasta la suscripción. defer sería bueno para esos escenarios.

Si tiene una capa de API de red que no devuelve un Observable para una solicitud, pero necesita una interfaz de Observable , puede usar create . Sin embargo, esa secuencia Observable no se crearía hasta la suscripción. Si quisiera que la llamada de la red se iniciara independientemente de la suscripción, entonces usaría un mecanismo diferente, como un Subject , que posiblemente se repita.


crear (...) en realidad crea Observable inmediatamente.

public final static <T> Observable<T> create(OnSubscribe<T> f) { return new Observable<T>(hook.onCreate(f)); }

defer (...) acepta la función de Fábrica que devuelve Observable (Sujeto, etc.), la envuelve con OnSubscribeDefer y crea Observable solo cuando el suscriptor se suscribe, nuevo Observable para cada suscriptor.

public final static <T> Observable<T> defer(Func0<Observable<T>> observableFactory) { return create(new OnSubscribeDefer<T>(observableFactory)); }

Vea más detalles here