Я задал очень похожий вопрос несколько дней назад, а потом ответил сам
накапливаются значения, например, при сканировании, но с возможностью сброса аккумулятора с течением времени
Может быть, это может помочь вам
НЕКОТОРЫЕ БОЛЬШЕ ДЕТАЛЕЙ
Альтернативный подход состоит в том, чтобы иметь Observable, который действует как таймер , который излучает с фиксированным интервалом, 10000 мс в вашем случае.
Когда этот таймер срабатывает , вы передаете управление в Observable, который накапливается через оператор scan
. Чтобы передать управление, вы используете оператор switchMap
, чтобы убедиться, что предыдущий экземпляр Observable завершен.
Если я правильно понимаю, чего вы хотите достичь, я бы использовал обычный Subject, а не ReplaySubject.
код может выглядеть примерно так
const subject = new Subject<number>();
const timer = Observable.timer(0, 1000).take(4);
const obs = timer.switchMap(
() => {
console.log('-----');
return subject
.scan((acc, cur) => {
acc.push(cur);
return acc;
}, []);
}
)
obs.subscribe(
events => {
console.log(JSON.stringify(events))
}
);
// TEST DATA EMITTED BY THE SUBJECT
setTimeout(() => {
subject.next(1);
}, 100);
setTimeout(() => {
subject.next(2);
}, 1100);
setTimeout(() => {
subject.next(3);
}, 2100);
setTimeout(() => {
subject.next(4);
}, 2200);