1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RxJS のcold/hot observable の動作確認して理解を深めるまで

Posted at

前置き

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 の挙動が直感と違って戸惑った。

今回の記事は以上です。

前回記事はこちら

詳細見たい人はこちら

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?