Cómo obtener el valor "actual" de un Observador en el momento de suscribirse
Estoy teniendo dificultades para grokking una parte en particular de RxJS: cuando se suscribe a un Observable, solo se está suscribiendo a cualquier futuro eventos de esa secuencia. Compare con las Promesas, donde, si la promesa se ha resuelto, obtendrá ese valor sin importar cuando 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>
EsperarÃa ver tanto" antes de la suscripción "como" después de la suscripción " impreso, aunque tiene sentido para mà que el" valor antiguo " caerÃa. 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 busco?
1 answers
Rx ofrece ambos comportamientos (asà como otros).
Los diferentes sujetos Rx disponibles pueden permitirle explorar las diferentes formas en que los observables pueden comportarse:
El
Rx.Subject
es la variedad más básica de disparar y olvidar if si no estaba suscrito cuando ocurrió el evento, entonces no lo ve.-
Use
new Rx.BehaviorSubject(undefined)
en lugar deSubject
y obtendrá el comportamiento que estaba buscando, ya que unBehaviorSubject
representa un " valor que puede change " -
Use
new Rx.ReplaySubject(5)
y obtendrá los 5 valores más recientes tan pronto como se suscriba Use
new Rx.AsyncSubject()
y no obtendrá nada hasta que el observable complete en ese momento obtendrá el valor final (y continuará 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 "resuelve" (es decir, completa), y después siempre da el valor a cualquiera que se suscriba.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-22 16:02:12