RxJava重播每个ID(选择器)?

时间:2019-06-28 19:04:29

标签: rxjs rx-java rx-java2

我具有事件总线类型的流,其中事件具有ID。我需要在订阅时向订阅者重播所选ID的最后一项。如果我仅在订阅者上使用replay(1)filter { it == id },则仅重播最后一个项目,因此筛选不同ID的订阅者将无法获得各自的重播。

我需要按ID进行重播。

我注意到重播{function}重载,但似乎并没有达到我想要的目的

另一种方法是发出所有事件的地图并对其进行过滤,但我希望可以更简洁地完成此工作。

1 个答案:

答案 0 :(得分:0)

Observables不保留任何状态。重放操作员在后台使用主题等来保留发出的数据。您将不得不选择其他方式。 scan可能很适合这里。这是一个可以保存最新事件的地图:

source.pipe(scan((acc, curr: any) => ({ ...acc, [curr.id]: curr}), {}))