ReactiveExtensions
RxJS
Rx
RxJSDay 19

RxJS の Scheduler とその種類

More than 3 years have passed since last update.

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


はじめに

今日は Scheduler とその種類を見ていきます。内容は一覧とメモです。

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


Scheduler

各種 Scheduler の superclass です。schedule を呼び出すことで処理を必要なら遅延させて実行します。

各種 Scheduler の instance を保持しています。通常は以下の instance を使うだけで事足りると思います。


  • Scheduler.currentThread = new CurrentThreadScheduler()

  • Scheduler.immediate = new ImmediateScheduler()

  • Scheduler.default = Scheduler.async = new DefaultScheduler()

また Source Code を読む上で SchedulerScheduler.prototype.scheduleScheduler.prototype.scheduleRecursive などを読むことになると思います。


CatchScheduler

Scheduler.prototype.catch で Scheduler で発生する Error を wrap する際に使用されています。


CurrentThreadScheduler

queue に入れつつ同期的に処理します。 RxJS 5 では queue になります。


DefaultScheduler

非同期で (setTimeout / setImmediate / nextTick など) で実行します。RxJS 5 では asap になります。

名前に反して Scheduler.default はほとんどの場合に default では使われていません。Observable.mergeObservable.just では Scheduler.immediate が、Observable.of では Scheduler.currentThread などが default として使われています。


HistorycalScheduler

指定した Date を基準に、そこからの相対時間で動作させることができます。VirtualTimeScheduler を継承しています。


ImmediateScheduler

特に timer を使わずに処理します。RxJS 5 では削除 (undefined で指定) になります。


VirtualTimeScheduler

Virtual Time を基準に動作する Scheduler の base class です。HistoricalScheduler の superclass です。ただ、使うべき場面をあまり想像できません (テスト用途?) 。


おわりに

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

はじめは実装について書こうかと思ったのですが大変そうなので諦めました。ただ Scheduler を把握しないとほとんど Operator の処理の流れを追うことができないので一度は確認すべきだと思います。

おそらく今日までで範囲的には


  • Observable

  • Observer

  • Subject

  • Disposable

  • Scheduler

  • 基本的な Operator

をひととおり見てきたので、もう Source Code を見ても特別新しい要素は出てこないと思います。