Давайте на минуту следующего кодаRx distinctUntilChanged позволяет повторение через настраиваемое время между событиями
Rx.Observable.merge(
Rx.Observable.just(1),
Rx.Observable.just(1).delay(1000)
).distinctUntilChanged()
.subscribe(x => console.log(x))
Мы ожидаем, что 1
регистрируются только один раз. Однако что, если мы хотим разрешить повторение значения, если его последняя эмиссия была конфигурируемой величиной времени назад? Я имею в виду, чтобы получил оба события в журнале.
Например, было бы здорово иметь что-то вроде следующего
Rx.Observable.merge(
Rx.Observable.just(1),
Rx.Observable.just(1).delay(1000)
).distinctUntilChanged(1000)
.subscribe(x => console.log(x))
В какой distinctUntilChanged()
принимает какой-то тайм-аут, чтобы позволить повторения на следующий элемент. Однако такой вещи не существует, и мне было интересно, знает ли кто-нибудь изящный способ добиться этого, используя высокоуровневые операторы, не спускаясь с фильтром, который требует обработки состояния.
Удивительный, очень умное решение проблемы - должен быть принятый ответ! – olsn
Не знал о операторе окна. Я реализовал что-то вроде этого сложным способом, но это действительно упрощает его. Благодаря! Хотя я заметил, что это может испускать повторяющиеся элементы, если они происходят вблизи границы окна (например, 990 мс и 1010 мс). Я изменил его, чтобы сделать тайм-аут границы относительно последнего отдельного элемента: 'obs.window (obs.distinctUntilChanged(). SwitchMap (s => Observable.timer (1000))). См. Измененный [пример] (https://jsbin.com/soyovumeja/edit?js, консоль). –