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