- Tema : Al suscribirse, siempre obtiene los datos que se envían después de su suscripción, es decir , no se reciben los valores anteriores .
const mySubject = new Rx.Subject();
mySubject.next(1);
const subscription1 = mySubject.subscribe(x => {
console.log('From subscription 1:', x);
});
mySubject.next(2);
const subscription2 = mySubject.subscribe(x => {
console.log('From subscription 2:', x);
});
mySubject.next(3);
subscription1.unsubscribe();
mySubject.next(4);
Con este ejemplo, aquí está el resultado que se imprimirá en la consola:
From subscription 1: 2
From subscription 1: 3
From subscription 2: 3
From subscription 2: 4
Tenga en cuenta cómo las suscripciones que llegan tarde se pierden algunos de los datos que se han introducido en el tema.
- Repetir temas : puede ayudar manteniendo un búfer de valores anteriores que se emitirán a las nuevas suscripciones.
A continuación, se muestra un ejemplo de uso para reproducir sujetos en los que buffer of 2 previous values
se mantienen y se emiten en nuevas suscripciones:
const mySubject = new Rx.ReplaySubject(2);
mySubject.next(1);
mySubject.next(2);
mySubject.next(3);
mySubject.next(4);
mySubject.subscribe(x => {
console.log('From 1st sub:', x);
});
mySubject.next(5);
mySubject.subscribe(x => {
console.log('From 2nd sub:', x);
});
Esto es lo que nos brinda en la consola:
From 1st sub: 3
From 1st sub: 4
From 1st sub: 5
From 2nd sub: 4
From 2nd sub: 5
- Sujetos de conducta : son similares a los sujetos de repetición, pero volverán a emitir solo el último valor emitido, o un valor predeterminado si no se ha emitido ningún valor anteriormente:
const mySubject = new Rx.BehaviorSubject('Hey now!');
mySubject.subscribe(x => {
console.log('From 1st sub:', x);
});
mySubject.next(5);
mySubject.subscribe(x => {
console.log('From 2nd sub:', x);
});
Y el resultado:
From 1st sub: Hey now!
From 1st sub: 5
From 2nd sub: 5
Referencia: https://alligator.io/rxjs/subjects/