Saltar al contenido

¿Cómo obtener el valor actual de RxJS Subject u Observable?

Matías, parte de este gran equipo de trabajo, nos ha hecho el favor de crear este tutorial porque domina a la perfección dicho tema.

Solución:

A Subject o Observable no tiene un valor actual. Cuando se emite un valor, se pasa a los suscriptores y el Observable se hace con eso.

Si desea tener un valor actual, utilice BehaviorSubject que está diseñado exactamente para ese propósito. BehaviorSubject mantiene el último valor emitido y lo emite inmediatamente a los nuevos suscriptores.

También tiene un método getValue() para obtener el valor actual.

La única forma en que tú deberían obtener valores “fuera de” un Observable/Sujeto es con ¡suscríbete!

si estás usando getValue() estás haciendo algo imperativo en el paradigma declarativo. Está ahí como una escotilla de escape, pero 99.9% del tiempo que NO debe usar getValue(). Hay algunas cosas interesantes que getValue() lo hará: arrojará un error si el sujeto ha sido cancelado, evitará que obtenga un valor si el sujeto está muerto porque tiene un error, etc. Pero, nuevamente, está ahí como una vía de escape para circunstancias excepcionales.

Hay varias formas de obtener el valor más reciente de un Sujeto u Observable de forma “Rx-y”:

  1. Utilizando BehaviorSubject: Pero en realidad suscribiéndote a él. Cuando te suscribes por primera vez a BehaviorSubject enviará sincrónicamente el valor anterior que recibió o con el que se inicializó.
  2. Usando un ReplaySubject(N): Esto almacenará en caché N valores y reprodúzcalos a los nuevos suscriptores.
  3. A.withLatestFrom(B): use este operador para obtener el valor más reciente de observable B cuando es observable A emite. Le dará ambos valores en un array [a, b].
  4. A.combineLatest(B): Utilice este operador para obtener los valores más recientes de A y B cada vez que sea A o B emite. Le dará ambos valores en un array.
  5. shareReplay(): Realiza una multidifusión Observable a través de un ReplaySubject, pero le permite volver a intentar el observable en caso de error. (Básicamente, te da ese comportamiento de almacenamiento en caché prometedor).
  6. publishReplay(), publishBehavior(initialValue), multicast(subject: BehaviorSubject | ReplaySubject)etc: Otros operadores que apalancan BehaviorSubject y ReplaySubject. Diferentes sabores de lo mismo, básicamente transmiten la fuente observable al canalizar todas las notificaciones a través de un asunto. tienes que llamar connect() para suscribirse a la fuente con el tema.

Tuve una situación similar en la que los suscriptores tardíos se suscribieron al Asunto después de que llegó su valor.

Encontré que ReplaySubject, que es similar a BehaviorSubject, funciona de maravilla en este caso. Y aquí hay un enlace para una mejor explicación: http://reactivex.io/rxjs/manual/overview.html#replaysubject

Si te gustó nuestro trabajo, puedes dejar un escrito acerca de qué te ha gustado de este enunciado.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *