Rx.VirtualTimeScheduler class

Base class for providing scheduling in virtual time. This inherits from the Rx.Scheduler class.

Usage

The following shows an example of using the Rx.VirtualTimeScheduler. In order for this to work, you must implement the add, toDateTimeOffset and toRelative methods as described below.

/* Comparer required for scheduling priority */
function comparer (x, y) {
    if (x > y) { return 1; }
    if (x < y) { return -1; }
    return 0;
}

var scheduler = new Rx.VirtualTimeScheduler(0, comparer);

/**
 * Adds a relative time value to an absolute time value.
 * @param {Any} absolute Absolute virtual time value.
 * @param {Any} relative Relative virtual time value to add.
 * @return {Any} Resulting absolute virtual time sum value.
 */
scheduler.add = function (absolute, relative) {
    return absolute + relative;
};

/**
 * Converts an absolute time to a number
 * @param {Number} The absolute time in ms
 * @returns {Number} The absolute time in ms
 */
scheduler.toDateTimeOffset = function (absolute) {
    return new Date(absolute).getTime();
};

/**
 * Converts the time span number/Date to a relative virtual time value.
 * @param {Number} timeSpan TimeSpan value to convert.
 * @return {Number} Corresponding relative virtual time value.
 */
scheduler.toRelative = function (timeSpan) {
    return timeSpan;
};

// Schedule some time
scheduler.scheduleAbsolute(1, function () { console.log('foo'); });
scheduler.scheduleAbsolute(2, function () { console.log('bar'); });
scheduler.scheduleAbsolute(3, function () { scheduler.stop(); });

// Start the scheduler
scheduler.start();

// => foo
// => bar

// Check the clock once stopped
console.log(scheduler.now());
// => 3

console.log(scheduler.clock);
// => 3

Location

  • rx.virtualtime.js

VirtualTimeScheduler Constructor

VirtualTimeScheduler Instance Methods

VirtualTimeScheduler Instance Properties

VirtualTimeScheduler Protected Abstract Methods

VirtualTimeScheduler Protected Methods

Inherited Classes

VirtualTimeScheduler Constructor

Rx.VirtualTimeScheduler(initialClock, comparer)

#

Creates a new virtual time scheduler with the specified initial clock value and absolute time comparer.

参数

  1. initialClock (Function): Initial value for the clock.
  2. comparer (Function): Comparer to determine causality of events based on absolute time.

function comparer (x, y) {
    if (x > y) { return 1; }
    if (x < y) { return -1; }
    return 0;
}

var scheduler = new Rx.VirtualTimeScheduler(
    0,          /* initial clock of 0 */
    comparer    /* comparer for determining order */
);

Location

  • rx.virtualtime.js

VirtualTimeScheduler Instance Methods

Rx.VirtualTimeScheduler.prototype.advanceBy(time)

#

Advances the scheduler's clock by the specified relative time, running all work scheduled for that timespan.

参数

  1. time (Any): Relative time to advance the scheduler's clock by.

var scheduler = new MyVirtualScheduler(
    200 /* initial time */
);

scheduler.scheduleAbsolute(250, function () {
    console.log('hello');
});

scheduler.advanceBy(300);
// => hello

console.log(scheduler.clock);
// => 500

Location

  • rx.virtualtime.js

Rx.VirtualTimeScheduler.prototype.advanceTo(time)

#

Advances the scheduler's clock to the specified time, running all work till that point.

参数

  1. time (Any): Absolute time to advance the scheduler's clock to.

var scheduler = new MyVirtualScheduler(
    0 /* initial time */
);

scheduler.scheduleAbsolute(100, function () {
    console.log('hello');
});

scheduler.scheduleAbsolute(200, function () {
    console.log('world');
});

scheduler.advanceBy(300);
// => hello
// => world

console.log(scheduler.clock);
// => 300

Location

  • rx.virtualtime.js

Rx.VirtualTimeScheduler.prototype.scheduleAbsolute(dueTime, action)

#

Schedules an action to be executed at dueTime.

参数

  1. dueTime (Any): Absolute time at which to execute the action.
  2. action (Function): Action to be executed.

返回值

(Disposable): The disposable object used to cancel the scheduled action (best effort).

var scheduler = new MyVirtualScheduler(
    0 /* initial time */
);

scheduler.scheduleAbsolute(100, function () {
    console.log('hello');
});

scheduler.scheduleAbsolute(200, function () {
    console.log('world');
});

scheduler.advanceBy(300);
// => hello
// => world

console.log(scheduler.clock);
// => 300

Location

  • rx.virtualtime.js

Rx.VirtualTimeScheduler.prototype.scheduleAbsoluteWithState(state, dueTime, action)

#

Schedules an action to be executed at dueTime.

参数

  1. state: (Any): State passed to the action to be executed.
  2. dueTime (Any): Absolute time at which to execute the action.
  3. action (Function): Action to be executed.

返回值

(Disposable): The disposable object used to cancel the scheduled action (best effort).

var scheduler = new MyVirtualScheduler(
    0 /* initial time */
);

scheduler.scheduleAbsoluteWithState('world', 100, function (x) {
    console.log('hello ' + x);
});

scheduler.scheduleAbsoluteWithState(200, function () {
    console.log('goodnight ' + x);
}, 'moon');

scheduler.start();
// => hello world
// => goodnight moon

console.log(scheduler.clock);
// => 200

Location

  • rx.virtualtime.js

Rx.VirtualTimeScheduler.prototype.scheduleRelative(dueTime, action)

#

Schedules an action to be executed at dueTime.

参数

  1. dueTime (Any): Relative time after which to execute the action.
  2. action (Function): Action to be executed.

返回值

(Disposable): The disposable object used to cancel the scheduled action (best effort).

var scheduler = new MyVirtualScheduler(
    100 /* initial time */
);

scheduler.scheduleRelative(100, function () {
    console.log('hello');
});

scheduler.scheduleRelative(200, function () {
    console.log('world');
});

scheduler.start();
// => hello
// => world

console.log(scheduler.clock);
// => 400

Location

  • rx.virtualtime.js

Rx.VirtualTimeScheduler.prototype.scheduleRelativeWithState(state, dueTime, action)

#

Schedules an action to be executed at dueTime.

参数

  1. state: (Any): State passed to the action to be executed.
  2. dueTime (Any): Relative time after which to execute the action.
  3. action (Function): Action to be executed.

返回值

(Disposable): The disposable object used to cancel the scheduled action (best effort).

var scheduler = new MyVirtualScheduler(
    0 /* initial time */
);

scheduler.scheduleRelativeWithState('world', 100, function (x) {
    console.log('hello ' + x);
});

scheduler.scheduleRelativeWithState('moon', 200, function () {
    console.log('goodnight ' + x);
});

scheduler.start();
// => hello world
// => goodnight moon

console.log(scheduler.clock);
// => 300

Location

  • rx.virtualtime.js

Rx.VirtualTimeScheduler.prototype.sleep(time)

#

Advances the scheduler's clock by the specified relative time.

参数

  1. time (Any): Relative time to advance the scheduler's clock by.

var scheduler = new MyVirtualScheduler(
    0 /* initial time */
);

scheduler.sleep(400);

console.log(scheduler.clock);
// => 400

Location

  • rx.virtualtime.js

Rx.VirtualTimeScheduler.prototype.start()

#

Starts the virtual time scheduler.

var scheduler = new MyVirtualScheduler(
    0 /* initial time */
);

scheduler.scheduleRelativeWithState('world', 100, function (x) {
    console.log('hello ' + x);
});

scheduler.scheduleRelativeWithState('moon', 200, function () {
    console.log('goodnight ' + x);
});

scheduler.start();
// => hello world
// => goodnight moon

console.log(scheduler.clock);
// => 400

Location

  • rx.virtualtime.js

Rx.VirtualTimeScheduler.prototype.stop()

#

Stops the virtual time scheduler.

var scheduler = new MyVirtualScheduler(
    0 /* initial time */
);

scheduler.scheduleRelative(100, function () {
    console.log('hello world');
});

scheduler.scheduleRelative(100, function () {
    scheduler.stop();
});

scheduler.scheduleRelative(100, function () {
    console.log('hello world');
});

scheduler.start();
// => hello world

Location

  • rx.virtualtime.js

VirtualTimeScheduler Abstract Protected Methods

Rx.VirtualTimeScheduler.prototype.add(absolute, relative)

#

Adds a relative time value to an absolute time value. This method is used in several methods including scheduleRelativeWithState, advanceBy and sleep.

参数

  1. absolute (Any): Absolute virtual time value.
  2. relative (Any): Relative virtual time value.

返回值

(Any): Resulting absolute virtual time sum value.

One possible implementation could be as simple as the following:

scheduler.add = function (absolute, relative) {
    return absolute + relative;
};

Location

  • rx.virtualtime.js

Rx.VirtualTimeScheduler.prototype.toDateTimeOffset(absolute)

#

Converts an absolute time to a number. This is used directly in the now method on the Rx.Scheduler

参数

  1. absolute (Any): The absolute time to convert.

返回值

(Number): The absolute time in ms.

One possible implementation could be as simple as the following:

// String -> Number
scheduler.toDateTimeOffset = function (absolute) {
    return return absolute.length;
};

Location

  • rx.virtualtime.js

Rx.VirtualTimeScheduler.prototype.toRelative(timeSpan)

#

Converts the time span number/Date to a relative virtual time value.

参数

  1. timeSpan (Any): The time span number value to convert. This is used directly in scheduleWithRelativeAndState and scheduleWithAbsoluteAndState.

返回值

(Number): Corresponding relative virtual time value.

One possible implementation could be as simple as the following:

// Number -> Number
scheduler.toRelative = function (timeSpan) {
    return timeSpan;
};

Location

  • rx.virtualtime.js