let sub = new Rx.Subject();
let val = 0;
Rx.Observable.fromEvent(window, 'scroll')
.do(_ => val++)
.debounceTime(500)
.subscribe(c => sub.next(val));
sub.subscribe(v => console.log(v));
我在滚动事件上有一个observable。除非经过一段时间,否则我想忽略它的值。
它看起来像这样(e是事件,而debounceTime
是500
):
---e1----e2----e3----e4----e6-----e7 <- events
---n1----------------------n6------- <- notifications
0--100------------------600------ <- time
就像这样:
---e1----e2----e3----e4----------------- <- events
---n1------------------------------------- <- notifications
0--100--------------------500------------- <- time
答案 0 :(得分:3)
Debouncing and throttling are different。你似乎想要throttle。
根本区别在于,当debouncing将 n 事件减少为1时,限制每个时间窗口只允许一个事件。
let val = 0;
const sub = Rx.Observable.fromEvent(window, 'scroll')
.do(_ => val++)
.throttle(500);
sub.subscribe(v => console.log(v));
然而,这并不完美。用户可能会在500毫秒的窗口内滚动,以至于您错过了最后一个滚动。一个solution涉及结合限制和去抖动。不过,我不确定这是最好的主意。
顺便说一下,您不需要只订阅一个observable来将值从它推送到另一个observable。只需订阅第一个observable。