Rozważmy przez chwilę podany kodRx distinctUntilChanged umożliwiają powtórzenie po ustawionym czasie pomiędzy wydarzeniami
Rx.Observable.merge(
Rx.Observable.just(1),
Rx.Observable.just(1).delay(1000)
).distinctUntilChanged()
.subscribe(x => console.log(x))
Oczekujemy, że 1
jest rejestrowane tylko raz. Co jednak, jeśli chcemy pozwolić na powtórzenie wartości, jeśli jej ostatnia emisja była konfigurowalna dawno temu? Chodzi mi o to, aby rejestrować oba zdarzenia:.
Na przykład byłoby fajnie mieć coś takiego następującym
Rx.Observable.merge(
Rx.Observable.just(1),
Rx.Observable.just(1).delay(1000)
).distinctUntilChanged(1000)
.subscribe(x => console.log(x))
W którym distinctUntilChanged()
akceptuje jakiś limit czasu, aby umożliwić powtórzenie następnego elementu. Jednak coś takiego nie istnieje i zastanawiałem się, czy ktokolwiek zna elegancki sposób, aby to osiągnąć, korzystając z operatorów o wysokim poziomie bez zakłócania działania filtra, który wymagałby obsługi stanu:
Awesome, bardzo sprytne rozwiązanie problemu - powinno być zaakceptowaną odpowiedzią! – olsn
Nie wiedziałem o operatorze okna. Wprowadziłem coś podobnego w skomplikowany sposób, ale to naprawdę upraszcza. Dzięki! Chociaż zauważyłem, że może wysyłać powtarzające się elementy, jeśli występują w pobliżu granicy okna (na przykład 990ms i 1010ms). Zmieniłem go, aby ustawić limit czasu granicznego względem ostatniego odrębnego elementu: 'obs.window (obs.distinctUntilChanged(). SwitchMap (s => Observable.timer (1000))). Zobacz zmodyfikowany [przykład] (https://jsbin.com/soyovumeja/edit?js,console). –