Вполне возможно использовать оператор last()
.То есть, если вы когда-либо используете complete()
для субъекта.
import { ReplaySubject, timer } from 'rxjs';
import { last } from 'rxjs/operators';
const rs = new ReplaySubject();
rs.pipe(last()).subscribe(v => console.log(v));
timer(1000).subscribe(() => rs.next('a'));
timer(2000).subscribe(() => rs.next('b'));
timer(3000).subscribe(() => rs.next('c'));
timer(4000).subscribe(() => rs.complete());
// after 4s prints 'c'
Здесь вы можете видеть, что через 4 секунды консоль напечатает последнее выданное значение, c
.
Но , если вы просто подписываетесь на ReplaySubject
, он всегда печатает последнее переданное значение.
const rs2 = new ReplaySubject();
rs2.subscribe(v => console.log(v));
timer(1000).subscribe(() => rs2.next(1));
timer(2000).subscribe(() => rs2.next(2));
timer(3000).subscribe(() => rs2.next(3));
// after 1s prints 1
// after 2s prints 2
// after 3s prints 3
У меня есть stackblitz для вас, посмотрите консольжурналы.