分组和辩论是否可观察?

时间:2018-06-15 13:11:11

标签: rxjs

我有一个observable,它发出一个包含几个参数的对象。在该对象中,其中一个参数(称为optionId)清楚地标识了一个选项。我想去除所有这种排放的实例。但是,如果新的optionId出现,我想开始一个新的时钟,然后开始新的辩论。

这是我正在寻找的样本大理石图:

-----1----1-----1----3----3----3----3-----1---3---1---3---1------>
(magic operators for which I'm unclear)
-------------------1-------------------3-----1---3---1---3---1--->

我有自我辩论,我喜欢,但它会这样做:

-----1----1-----1----3----3----3----3-----1---3---1---3---1------>
debounce
-------------------1-------------------3--------------------1---->

它会在最后跳过所有中级3 ...这有意义吗?

1 个答案:

答案 0 :(得分:2)

我认为你正在寻找这个:

source$.pipe(
  groupBy(item => item.optionId),
  map(group => group.pipe(
    debounceTime(1000),
  )),
  mergeAll(),
).subscribe(console.log);

这样做是因为它根据optionId将源分组为更高阶的可观察量,这为您提供了每组的可观察量。然后将每个组分别映射到去抖动版本,最后我们将它们全部合并到一起。

使用map返回可观察量的极少数情况之一实际上就是我们想要的。 : - )