RxJS:Rx.Observable.interval 上的 debounceTime 未按预期工作
RxJS: debounceTime on Rx.Observable.interval is not working as expected
在下面的代码行中,我希望每 2 秒打印一次 here
。但是没有打印任何内容:
Rx.Observable.interval(1000).debounceTime(2000).subscribe(x => console.log('here'))
然而,在下面的代码行中,here
按预期每 2 秒打印一次:
Rx.Observable.interval(2000).debounceTime(1000).subscribe(x => console.log('here'))
在第一种情况下,我希望将 1 秒周期的事件流去抖动到 2 秒周期。这似乎不起作用。
在第二种情况下,我希望将 2 秒周期的事件流去抖动到 1 秒周期。这似乎有效。
为什么第一个案例没有按预期工作?我的预期有问题吗?
第一种情况的问题是您每秒创建一个新间隔,但告诉可观察对象等待 2 秒过去,以便将对象传递给订阅。由于 interval
值小于 debounceTime
值,您的订阅永远不会 "resolve".
您可能会将 debounce 与 throttle 混淆。
去抖时间
对于每个项目,等待 X 毫秒直到没有其他项目被发射,并且 只有然后 发射该项目。
Rx.Observable.interval(1000).debounceTime(2000).subscribe(x => console.log('here'))
所有项目都被丢弃,因为项目总是在 2000 毫秒内发射。
节流时间
如果在最后 X 毫秒内没有其他项目被发射,则发射一个项目。否则,该项目将被丢弃。
Rx.Observable.interval(1000).throttleTime(2000).subscribe(x => console.log('here'))
每 2000 毫秒打印一个项目。
在下面的代码行中,我希望每 2 秒打印一次 here
。但是没有打印任何内容:
Rx.Observable.interval(1000).debounceTime(2000).subscribe(x => console.log('here'))
然而,在下面的代码行中,here
按预期每 2 秒打印一次:
Rx.Observable.interval(2000).debounceTime(1000).subscribe(x => console.log('here'))
在第一种情况下,我希望将 1 秒周期的事件流去抖动到 2 秒周期。这似乎不起作用。
在第二种情况下,我希望将 2 秒周期的事件流去抖动到 1 秒周期。这似乎有效。
为什么第一个案例没有按预期工作?我的预期有问题吗?
第一种情况的问题是您每秒创建一个新间隔,但告诉可观察对象等待 2 秒过去,以便将对象传递给订阅。由于 interval
值小于 debounceTime
值,您的订阅永远不会 "resolve".
您可能会将 debounce 与 throttle 混淆。
去抖时间
对于每个项目,等待 X 毫秒直到没有其他项目被发射,并且 只有然后 发射该项目。
Rx.Observable.interval(1000).debounceTime(2000).subscribe(x => console.log('here'))
所有项目都被丢弃,因为项目总是在 2000 毫秒内发射。
节流时间
如果在最后 X 毫秒内没有其他项目被发射,则发射一个项目。否则,该项目将被丢弃。
Rx.Observable.interval(1000).throttleTime(2000).subscribe(x => console.log('here'))
每 2000 毫秒打印一个项目。