(使用角度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,我们会看到节流更新日志。
我最好的猜测事情正在快速发生(这就是为什么我在它之间放置0.00000001,因为1 ms会在开始时发出一次节流),但它们之间的ms差异只会让我感到惊讶对此感到不对。
非常喜欢一些帮助,我很困惑。
(使用debounceTime(1)而非节流,我们最后只得到1个去抖记录,看起来一切都不到1毫秒就不可能了!中间有一个服务器请求! )
编辑:我在Mark van Straten的评论中指出,我已经制作了.timestamp()运营商。这是输出:答案 0 :(得分:0)
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-|