¿Cuál es la diferencia entre Sujeto y Sujeto de Comportamiento?
No tengo clara la diferencia entre a Subject
y a BehaviorSubject
. ¿Es solo que a BehaviorSubject
tiene la getValue()
función?
Aceptado
Un BehaviorSubject tiene un valor. Cuando se suscribe emite el valor inmediatamente. Un Asunto no tiene un valor.
Ejemplo de tema (con API RxJS 5):
const subject = new Rx.Subject();
subject.next(1);
subject.subscribe(x => console.log(x));
La salida de la consola estará vacía
Ejemplo de sujeto de comportamiento:
const subject = new Rx.BehaviorSubject(0);
subject.next(1);
subject.subscribe(x => console.log(x));
Salida de consola: 1
Además:
BehaviorSubject
debe crearse con un valor inicial: nuevoRx.BehaviorSubject(1)
- Considere
ReplaySubject
si desea que el tema obtenga valores publicados anteriormente.
ComportamientoAsunto
BehaviourSubject devolverá el valor inicial o el valor actual en la Suscripción
var bSubject= new Rx.BehaviorSubject(0); // 0 is the initial value
bSubject.subscribe({
next: (v) => console.log('observerA: ' + v) // output initial value, then new values on `next` triggers
});
bSubject.next(1); // output new value 1 for 'observer A'
bSubject.next(2); // output new value 2 for 'observer A', current value 2 for 'Observer B' on subscription
bSubject.subscribe({
next: (v) => console.log('observerB: ' + v) // output current value 2, then new values on `next` triggers
});
bSubject.next(3);
Con salida:
observerA: 0
observerA: 1
observerA: 2
observerB: 2
observerA: 3
observerB: 3
Sujeto
El sujeto no devuelve el valor actual de la Suscripción. Se activa solo en caso de .next(value)
llamada y devuelve/emite elvalue
var subject = new Rx.Subject();
subject.next(1); //Subjects will not output this value
subject.subscribe({
next: (v) => console.log('observerA: ' + v)
});
subject.subscribe({
next: (v) => console.log('observerB: ' + v)
});
subject.next(2);
subject.next(3);
Con el siguiente resultado en la consola:
observerA: 2
observerB: 2
observerA: 3
observerB: 3