[英]Rxjs throttleTime works unexpected
(使用角度2和NgRedux 2与ngrx 5.0.3)
usersReducer $,articlesReducer $是我从导入的模块(ngRedux)收到的匿名主题。
let merge$ = Observable.merge(this.usersReducer$, this.articlesReducer$);
.do((data) => {
let time = performance.now();
console.log('%c REGULAR UPDATE ' + time, 'background: #555; color: #bada55', data);
});
// TODO : why it doesn't work as expected?!
// The merge$ emits values, and here it only emits once and happens again only
// when the reducers change much later.
this.throttleSub = merge$
.throttleTime(0.0000000000001)
.do((data) => {
let time = performance.now();
this.refreshData();
console.log('%c THROTTLE UPDATE ' + time, 'background: #222; color: #bada55', data);
})
.subscribe(() => {})
注意:如果我稍后有任何userReducer $ / articleReducer $ emit,我们将看到节流UPDATE日志。
我最好的猜测是事情发生得很快(这就是为什么我把它放在0.00000001之间的时间,因为1 ms会在开始时发出一次节流),但是它们之间的ms差异只会让我感觉不对劲。
会爱一些帮助,我很困惑。
(使用debounceTime(1)而不是节流,我们最后只得到1个去抖日志,似乎不可能一切都不到1ms!中间有一个服务器请求!)
编辑:我已经制作了.timestamp()运算符,正如Mark van Straten在评论中所述。 这是输出:
更新:我已将时间戳链接到origin observable,并将throttleTime链接到另一个订阅者,我认为现在更清楚了。
http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-throttleTime
设置值传递,然后忽略下一个持续时间毫秒的源值。
因此行为是它发出一个值,然后定时器运行,并且在定时器运行完成后,它将从上游更下游发出下一个发射值。
如果你要制作一个这种行为的大理石图,它看起来像这样:
input stream: --a-b-c---b----c--d----------a-|
throttleTime(50): a-----| b-----| d-----| a-|
output stream: --a-------b-------d----------a-|
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.