forked from ReactiveX/rxjs
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix(schedulers): fix asap and animationFrame schedulers to execute ac…
…ross their respective async bou The AsapScheduler and AnimationFrameSchedulers were totally busted. My bad. Now they execute their scheduled actions in batches, but if actions reschedule while executing a batch, a new frame is requested for the rescheduled action to execute in. ReactiveX#1814
Showing
25 changed files
with
592 additions
and
696 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,93 @@ | ||
import {Subscription} from './Subscription'; | ||
import {Action} from './scheduler/Action'; | ||
|
||
export interface Scheduler { | ||
now(): number; | ||
schedule<T>(work: (state?: T) => Subscription | void, delay?: number, state?: T): Subscription; | ||
flush(): void; | ||
active: boolean; | ||
actions: Action<any>[]; // XXX: use `any` to remove type param `T` from `Scheduler`. | ||
scheduledId: number; | ||
import {Subscription, TeardownLogic} from './Subscription'; | ||
|
||
/** | ||
* An execution context and a data structure to order tasks and schedule their | ||
* execution. Provides a notion of (potentially virtual) time, through the | ||
* `now()` getter method. | ||
* | ||
* Each unit of work in a Scheduler is called an {@link Action}. | ||
* | ||
* ```ts | ||
* class Scheduler extends Array { | ||
* now(): number; | ||
* schedule(work, delay?, state?): Subscription; | ||
* } | ||
* ``` | ||
* | ||
* @class Scheduler | ||
*/ | ||
export class Scheduler extends Array { | ||
|
||
public static now: () => number = Date.now ? Date.now : () => +new Date(); | ||
|
||
constructor(private SchedulerAction: typeof Action, | ||
now: () => number = Scheduler.now) { | ||
super(); | ||
this.now = now; | ||
} | ||
|
||
/** | ||
* A getter method that returns a number representing the current time | ||
* (at the time this function was called) according to the scheduler's own | ||
* internal clock. | ||
* @return {number} A number that represents the current time. May or may not | ||
* have a relation to wall-clock time. May or may not refer to a time unit | ||
* (e.g. milliseconds). | ||
*/ | ||
public now: () => number; | ||
|
||
/** | ||
* Schedules a function, `work`, for execution. May happen at some point in | ||
* the future, according to the `delay` parameter, if specified. May be passed | ||
* some context object, `state`, which will be passed to the `work` function. | ||
* | ||
* The given arguments will be processed an stored as an Action object in a | ||
* queue of actions. | ||
* | ||
* @param {function(state: ?T): ?Subscription} work A function representing a | ||
* task, or some unit of work to be executed by the Scheduler. | ||
* @param {number} [delay] Time to wait before executing the work, where the | ||
* time unit is implicit and defined by the Scheduler itself. | ||
* @param {T} [state] Some contextual data that the `work` function uses when | ||
* called by the Scheduler. | ||
* @return {Subscription} A subscription in order to be able to unsubscribe | ||
* the scheduled work. | ||
*/ | ||
public schedule<T>(work: (state?: T) => TeardownLogic, delay: number = 0, state?: T): Subscription { | ||
return new this.SchedulerAction<T>(this, work).schedule(state, delay); | ||
} | ||
} | ||
|
||
|
||
/** | ||
* A unit of work to be executed in a {@link Scheduler}. An action is typically | ||
* created from within a Scheduler and an RxJS user does not need to concern | ||
* themselves about creating and manipulating an Action. | ||
* | ||
* ```ts | ||
* class Action<T> extends Subscription { | ||
* new (work: (state?: T) => TeardownLogic, scheduler: Scheduler); | ||
* schedule(state?: T, delay: number = 0): Subscription; | ||
* } | ||
* ``` | ||
* | ||
* @class Action<T> | ||
*/ | ||
export class Action<T> extends Subscription { | ||
constructor(scheduler: Scheduler, work: (state?: T) => TeardownLogic) { | ||
super(); | ||
} | ||
/** | ||
* Schedules this action on its parent Scheduler for execution. May be passed | ||
* some context object, `state`. May happen at some point in the future, | ||
* according to the `delay` parameter, if specified. | ||
* @param {any} [state] Some contextual data that the `work` function uses when | ||
* called by the Scheduler. | ||
* @param {number} [delay] Time to wait before executing the work, where the | ||
* time unit is implicit and defined by the Scheduler. | ||
* @return {void} | ||
*/ | ||
public schedule(state?: T, delay: number = 0): Subscription { | ||
return this; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.