我具有事件总线类型的流,其中事件具有ID。我需要在订阅时向订阅者重播所选ID的最后一项。如果我仅在订阅者上使用replay(1)
和filter { it == id }
,则仅重播最后一个项目,因此筛选不同ID的订阅者将无法获得各自的重播。
我需要按ID进行重播。
我注意到重播{function}重载,但似乎并没有达到我想要的目的
另一种方法是发出所有事件的地图并对其进行过滤,但我希望可以更简洁地完成此工作。
答案 0 :(得分:0)
Observables不保留任何状态。重放操作员在后台使用主题等来保留发出的数据。您将不得不选择其他方式。 scan
可能很适合这里。这是一个可以保存最新事件的地图:
source.pipe(scan((acc, curr: any) => ({ ...acc, [curr.id]: curr}), {}))