0

私は、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/

4

1 に答える 1