我有一个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 ...这有意义吗?
答案 0 :(得分:2)
我认为你正在寻找这个:
source$.pipe(
groupBy(item => item.optionId),
map(group => group.pipe(
debounceTime(1000),
)),
mergeAll(),
).subscribe(console.log);
这样做是因为它根据optionId
将源分组为更高阶的可观察量,这为您提供了每组的可观察量。然后将每个组分别映射到去抖动版本,最后我们将它们全部合并到一起。
使用map
返回可观察量的极少数情况之一实际上就是我们想要的。 : - )