繁体   English   中英

Rxjs throttleTime工作意外

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM