RXJS субъекты имеют 3 различных типа каналов, поскольку
1) if you miss it you miss it = Subject
2) give me the last value = BehaviorSubject
3) give me all the last values = ReplaySubject
звучит так, как будто вы ищете № 3 правильно?Если это так, просто загляните в ReplaySubjects.
Subject - подписчик получит только опубликованные значения, которые были отправлены после подписки.A
BehaviorSubject - последнее значение кэшируется.Подписчик получит последнее значение при первоначальной подписке.
ReplaySubject - он может кэшировать до указанного количества выбросов.Любые подписчики получат все кэшированные значения при подписке.
import * as Rx from "rxjs";
const subject = new Rx.ReplaySubject(2, 100);
// subscriber 1
subject.subscribe((data) => {
console.log('Subscriber A:', data);
});
setInterval(() => subject.next(Math.random()), 200);
// subscriber 2
setTimeout(() => {
subject.subscribe((data) => {
console.log('Subscriber B:', data);
});
}, 1000)
Мы создаем ReplaySubject и указываем, что мы хотим хранить только последние 2 значения, но не более 100 мс. Мы начинаем излучатьПредметные значения каждые 200 мс.Подписчик А подберет это и зарегистрирует каждое значение, которое излучает Субъект.Мы начинаем подписку с подписчиком B, но делаем это через 1000 мс.Это означает, что субъект уже выпустил 5 значений, прежде чем мы начнем подписку.Когда мы создали тему, мы указали, что хотим сохранить максимум 2 значения, но не более 100 мс.Это означает, что через 1000 мс, когда подписчик B начнет подписку, он будет получать только 1 значение, поскольку субъект выдает значения каждые 200 мс.