react javascript rxjs

javascript - react - rxjs observable



Cómo obtener el valor "actual" de un observador en el momento de la suscripción (1)

Rx ofrece ambos comportamientos (así como otros).

Los diferentes sujetos de Rx disponibles pueden permitirle explorar las diferentes formas en que los observables pueden comportarse:

  • Rx.Subject es la variedad más básica de disparar y olvidar: si no estaba suscrito cuando ocurrió el evento, entonces no lo ve.

  • Use new Rx.BehaviorSubject(undefined) lugar de Subject y obtendrá el comportamiento que estaba buscando, ya que un BehaviorSubject representa un "valor que puede cambiar"

  • Use el new Rx.ReplaySubject(5) y obtendrá los 5 valores más recientes tan pronto como se suscriba

  • Use el new Rx.AsyncSubject() y no obtendrá nada hasta que el observable se complete, momento en el que obtendrá el valor final (y continúe obteniendo el valor final si se suscribe nuevamente). Este es el verdadero análogo Rx de las promesas, ya que no produce nada hasta que se "resuelve" (es decir, se completa), y luego siempre da el valor a cualquiera que se suscriba.

Me está costando mucho asimilar una parte particular de RxJs: cuando te suscribes a un Observable, solo te suscribes a futuros eventos de ese Stream. Compare con Promesas, donde, si la promesa se resolvió, obtendrá ese valor sin importar cuándo llame then() .

Aquí hay un ejemplo de código:

var subject = new Rx.Subject(); subject.onNext(''old value''); subject.onNext(''before subscription''); subject.subscribe(function(val) { document.write(val); }); subject.onNext(''after subscription'');

<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/2.3.24/rx.all.js"></script>

Espero ver impresos "antes de la suscripción" y "después de la suscripción", aunque tiene sentido para mí que "el valor antiguo" se elimine. Pero parece que RxJs no funciona de esa manera (solo se imprime "después de la suscripción"). ¿Cómo puedo obtener el resultado que estoy buscando?