前置き
cold/hot observable について、気になったあれこれを調べて動作確認をしたのでそのメモ。
確認方法としては、下記ページを作成し、console.log の出力を見て確認した。
本編
cold observable
Subscription とストリームが1対1の関係。
そのため、Observable を都度生成しても使いまわしてもSubscriber の挙動は同じ。
ストリームがcomplete または、Subscription がunsubscribe すると両者破棄される。
hot observable
Subscription とストリームが多対1となりうる関係。
そのため、Observable を
都度生成すると、1対1となるため複数のSubscriber が異なる挙動をする。(cold と同じ)
使いまわすと、多対1となるため複数のSubscriber が同じ挙動をする。
また、ストリームがcomplete すると、ストリームとそれに紐づくSubscription の両者破棄される。(cold と同じ)
しかし、あるストリームに紐づくSubscription すべてがunsubscribe すると、ストリームも破棄される場合とされない場合がある。
Angular でshareReplay を使うにあたって
shareReplay(1)
は紐づくSubscription すべてがunsubscribe してもストリームが破棄されない。
つまり、Async Pipe を使用していてもストリームが破棄されない。
そういう時はshareReplay({ bufferSize: 1, refCount: true })
を使用すれば、すべてがunsubscribe されたときにストリームも破棄される。
または、takeUntilDestroyed
を使用すればcomplete してくれるので問題ない。
感想
楽しかった。
あと、hot の挙動が直感と違って戸惑った。
今回の記事は以上です。
前回記事はこちら
詳細見たい人はこちら