LoginSignup
4
8

More than 5 years have passed since last update.

RxJS の Disposable とその種類

Posted at

この記事は bouzuya's RxJS Advent Calendar 2015 の 18 日目かつ RxJS Advent Calendar 2015 の 18 日目です。

はじめに

今日は Disposable とその種類を見ていきます。個人的な理由で時間がないので一覧とメモになっています。

RxJS 4.0.7 を対象にしています。

Disposable とその種類

Disposable

Disposabledispose を持つ class です。subscribe の戻り値は Disposable です。dispose することで unsubscribe (例えば removeEventListener ) されます。Operator ごとに様々な Disposable を使っています。ちなみに概要は 2 日目にも書きました

Disposable の constructor は action を引数に取り、dispose 呼び出しで一度だけ action を実行します。

大した関数は持たないので実装を挙げます。

  • Disposable.create ... (action) => new Disposable(action)
  • Disposable.empty ... { dispose: noop }
  • Disposable.isDisposable ... (d) => d && isFunction(d.dispose)
  • Disposable.prototype.dispose ... 前述の通りです。

Disposable にはいくつかの種類があります。

これらは superclass の実装を必要としないせいか、Disposable を継承していません。また Disposable を名前に含まないものの dispose を持ち Disposable として扱われている AutoDetachObserver などもあります。

BinaryDisposable

BinaryDisposable の constructor は 2 つの Disposable を引数に取ります。dispose で、それらの 2 つの Disposabledispose を呼び出します。

CompositeDisposable

CompositeDisposable の constructor は複数の Disposable または Disposable の配列を引数に取ります。また add / remove で、それらの Disposable へ追加・削除できます。dispose で、それらのすべての Disposabledispose を呼び出します。

removedispose されていなければ削除できます。add は既に CompositeDisposabledispose されていれば、追加した瞬間に dispose されます。

NAryDisposable

CompositeDisposable から add / remove を除いたものです。

RefCountDisposable

constructor では Disposable を引数に取ります。getDisposablecount++ し、disposecount-- します。count === 0 のとき、constructor で取った Disposabledispose します。

ちなみに Observable.prototype.refCount で返されるわけではありません。

ScheduledDisposable

ScheduledDisposable の constructor は schedulerdisposable を引数に取り、 dispose を呼び出されたときに scheduler に従って dispose を呼び出します。

SerialDisposable

getDisposable / setDisposable を持ち、ひとつの disposable を内部に保持します。setDisposable を複数回呼び出すと、保持している disposabledispose して新しい Disposable を保持します。

SingleAssignmentDisposable

getDispoable / setDisposable を持ち、ひとつの disposable を内部に保持します。setDisposable を複数回呼び出すと、既に disposable を保持している場合は例外を投げます。

おわりに

今日は Disposable とその種類を確認しました。

個人的な理由で時間がなく、どう使われるのかなどに触れられていないのが残念です。

4
8
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
4
8