この記事は 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 を読む上で Scheduler や Scheduler.prototype.schedule や Scheduler.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.merge や Observable.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 の処理の流れを追うことができないので一度は確認すべきだと思います。
おそらく今日までで範囲的には
ObservableObserverSubjectDisposableScheduler- 基本的な Operator
をひととおり見てきたので、もう Source Code を見ても特別新しい要素は出てこないと思います。