私は、messages$ストリームの配列であるmessages$sを含むstate$ストリームを持っています。State$ が更新され、新しい messages$ が表示されます。
サブスクライバーがすべてのメッセージ $ からのメッセージを 1 つの単一ストリームで処理するようにしたいのですが、このストリームには正しいイベントのみが含まれている必要があります。
毎回マージされたメッセージ $ を flatMap しようとしましたが、古いメッセージ $ (以前の状態の $ 値) が複数回サブスクライブされるという問題が発生しました。
これを解決するにはどうすればよいですか?
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) - 状態に 1 つのメッセージ $ がある場合、s(2) 2 番目のメッセージ $ が追加された場合 したがって、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/