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