如何在RXJS 5+中按时间有效地对事件进行分组

卡尔提克·普拉萨德(Karthik Prasad)

我有4种不同类型的事件,我习惯Observable.fromEvent(object, 'type1')将其转换为可观察的事件它们触发的事件具有以下组合。

  1. 仅类型1。
  2. 类型1,类型2
  3. 类型1,类型3
  4. 类型1,类型4,
  5. 2型,1型,3型
  6. type3,type4,type1

由于没有直截了当的模式。我使用了merge和bufferTime。抽取事件,如下所示。

const e1 = Observable.fromEvent(ob1, 'type1');
const e2 = Observable.fromEvent(ob1, 'type2');
const e3 = Observable.fromEvent(ob1, 'type3');
const e4 = Observable.fromEvent(ob1, 'type4');

const merged = merge(e1, e2, e3, e4);
const sampled = merged.bufferTime(500);
sampled.subscribe(e=>console.log(e));

尽管上面的代码可以正常工作,但是每隔发出一次数据.5s,如果没有事件,则发出空数据。我尝试使用buffer,但是在RXJS 5+中,缓冲区仅具有closingselector功能。

我如何使用可观察变量,以便计时器从空缓冲区开始并结束x + .5s,而不是每隔0.5s采样一次。

文斯

似乎您可能要buffer使用debounceTimedebounceTime运营商将执行以下操作:

仅在经过特定时间段后才发出源Observable的值,而不会发出其他源信号。

换句话说,它只会最近一次发射之后发射x几秒钟因此,您最终不会产生任何空白数据。

您可以将其buffer用于从您的主数据流中收集“大块”排放,如下所示:

const second = 1000;
const debounced = merged.debounceTime(.5 * second);
const sampled = merged.buffer(debounced);

我实际上写了一篇有关收集按钮点击次数的博客文章,该文章使用了这种确切方法(并进行了更详细的介绍):http : //www.vincecampanale.com/blog/2017/05/24/learn-rxjs-with- a-按钮/

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Word 2016中如何有效地绘制带有厚边的网格(例如5 x 5)?

如何在TypeScript的ReactiveX / rxjs 5中使用exhaustMap

如何有效地对对象进行分组并为每组对象进行计算

如何在python中有效地将字典中的值分组

大HDF5数据集,如何在每个时期后有效地洗牌

如何通过作为数组的子属性有效地对对象数组进行分组?

如何在python中的时间序列之间有效地映射数据

如何在 Django Reversions 中的给定时间有效地检索属性的值?

如何在rxjs 5中测试使用定时间隔返回可观察值的函数?

如何在rxjs中每5次调用后进行延迟?

如何在 RXJS Angular 5 中观察没有特定名称的响应 JSON 中的对象

如何有效地将项目分组到成对的存储桶中(如果存在)

如何有效地订购时间python

如何有效地填充时间序列?

如何有效地比较日期时间对象

如何有效地检查鼠标是否在 HTML5 画布中的许多(120)个不同区域中?

如何在RxJs 5中将主题转换为可观察对象

如何在订阅期间从可观察的Angular 5 RxJS中检查NULL结果?

如何在RxJS5中施加定时背压?

如何有效地进行多线程

如何有效地进行多个“不是”过滤

如何有效地对这个列表进行排序?

如何有效地对 numpy 矩阵进行排序

我如何有效地进行亲子配对?

如何有效地进行多次随机试验?

如何有效地进行多次MongoDB旅行

如何在pyspark的高基数分类列中以低频率计数有效地分组级别?

如何在熊猫中为每个分组依据有效地分配单个值

如何有效地跳到大日志中的特定时间?