Używam strumienia, który jest dławiony po przewinięciu okna.
Podczas dławienia (tak długo, jak przewijanie), wysyła wartości do konsoli.RXJS - uruchamiać timer tylko wtedy, gdy nie jest używany?
Jednak, gdy strumień jest bezczynny (użytkownik jest nie przewijanie okna) - Chcę, aby zegar do kick. Jednak - jeśli użytkownik ponownie przewija - nie chcę, aby timer emitował wartości.
Obecnie robię tak:
const observable = Rx.Observable.fromEvent(window, 'scroll');
const subscriber = observable
.throttleTime(300)
.map(() => 'throttle')
.merge(Rx.Observable.interval(1000).map(() => 'tick'))
.subscribe(
(x) => {
console.log('Next: event!', x);
},
(err) => {
console.log('Error: %s', err);
},
() => {
console.log('Completed');
});
Problemem jest to, że podczas przewijania - Widzę zarówno "throttle"
I "tick"
(mam tylko zobaczyć "przepustnicy")
myśleć o tym z innego POV. Praca zawsze musi zostać uruchomiona. Jeśli przewijam - ten zwężony przewijanie - powinien wywołać zadanie. Jeśli nie przewijam - timer powinien zacząć działać. (i zatrzymuje się, gdy użytkownik ponownie zacznie przewijać).
Pytanie:
Jak mogę uruchomić stoper po bezczynności nie przewijania?
Oto jak zadać dobre pytanie na SO. +1 –
Re [Twoja druga uwaga] (http://stackoverflow.com/questions/41522222/making-a-typing-timer-in-rxjs-tracking-time-spent-typing/41526650?noredirect=1#comment74109988_41526650) : Możesz rozwiązać ten problem, wykorzystując w tym celu 'exhaustMap' +' debounceTime', aby wykryć zwój.To co zrobiłem tutaj z 'switchMap' działa, ponieważ nic nie robimy podczas serii zdarzeń, a praca dzieje się, gdy strumień jest bezczynny. Odwrotnie, 'switchMap' wznowi zadanie (timer) za każdym razem, gdy zostanie wyemitowane nowe zdarzenie przewijania. – Dorus