我有一个包含 messages$s 的 state$ 流,它是 messages$ 流的数组。State$ 被更新并且新消息$ 出现。
我希望订阅者在一个单一流中处理来自所有消息 $ 的消息,并且我希望这个流只包含正确的事件。
我每次都尝试对合并的消息$进行平面映射,但遇到的问题是旧消息$s(在以前的 states$ 值中)被多次订阅。
我该如何解决这个问题?
let allMessages$ = state$.flatMap(s => {
return Observable.merge(s.messages$s)
}
)
allMessages$.subscribe((x)=>{
console.log('message', x)
// message from single message$ appear multiple times
})
问题是,在 state$ 更新(推送项目)后,旧的会被多次订阅。
state$ --s(1)---------s(2)----
message$s[0]. --m1----m2-----------m4--
message$s[1] ---------------m3--------
allMessages$ --m1----m2-----m3----m4
m1 m4
s(1) - 当 state 有 1 个 message$ 时,s(2) 当第二个 message$ 添加时所以 allMessages$ 触发来自 item1 的消息。
我想要的是:
state$ --s(1)---------s(2)-----
message$s[0] --m1----m2-----------m4--
message$s[1] ---------------m3--------
allMessages$ --m1----m2-----m3----m4
这个文件显示了简化的情况:http: //jsfiddle.net/8jFJH/797/