Necesito compartir un Observable caliente entre varios suscriptores y emitir el valor más reciente a los nuevos suscriptores. Estoy tratando de lograr esto con shareReplay(1) , sin embargo, el primer suscriptor no puede recuperar el valor más reciente porque el operador shareReplay no hace nada cuando no hay suscripción, por lo que no almacena nada para el primer suscriptor.
¿Cómo soluciono esto sin tener una suscripción permanente solo para mantener vivo shareReplay ?
Puede resolver su problema usando publishReplay(1) en lugar de shareReplay(1) :
const subject = new Subject() const source$ = subject.pipe(publishReplay(1)) source$.connect(); subject.next(1) subject.next(2) subject.next(3) source$.subscribe(v => console.log(v)) subject.next(4) subject.next(5) subject.next(6)Producción:
3 4 5 6 La parte importante es que con publishReplay , puedes controlar cuándo comienza la suscripción ( source$.connect() ). shareReplay comenzará solo con la primera suscripción.