Avatar ·

¿Cuál es la diferencia entre Subject y BehaviorSubject en RxJS? Ejemplos en TypeScript

¡Hola a todos! Empecé a estudiar Angular y RxJS, y tengo confusión con Subject y BehaviorSubject. Parece que ambos se usan para crear Observable con la capacidad de enviar valores, pero no entiendo cuál es la diferencia clave.

Aquí hay un ejemplo que escribí. Cuando uso Subject, los suscriptores que se suscriben después de enviar un valor no reciben ese valor:

import { Subject } from 'rxjs';

const subject = new Subject<number>();

subject.next(1); // Enviamos el valor antes de la suscripción

subject.subscribe({
  next: (v) => console.log('Subject suscriptor A:', v)
});

subject.next(2); // Enviamos después de la suscripción
// Resultado: Subject suscriptor A: 2
// El valor 1 se pierde

Y cuando uso BehaviorSubject, los suscriptores que se suscriben más tarde reciben el último valor:

import { BehaviorSubject } from 'rxjs';

const behaviorSubject = new BehaviorSubject<number>(0); // N