scheduling

AMD: require(["esri/core/scheduling"], (scheduling) => { /* code goes here */ });
ESM: import * as scheduling from "@arcgis/core/core/scheduling.js";
Object: esri/core/scheduling
Since: ArcGIS Maps SDK for JavaScript 4.7

Various utilities and convenience functions for executing code at various phases of browser frames. The scheduling module allows you to register tasks that are executed in every animation frame. This can be used to synchronize updates with ongoing animations of the view, or to animate the view manually by adjusting the extent or camera in every frame.

// Animate the scene view camera heading in every frame
let handle = scheduling.addFrameTask({
  update: function() {
    let camera = view.camera.clone();
    camera.heading += 0.2;
    view.camera = camera;
  }
});

// Remove frame task as soon as the user starts navigating in the view
reactiveUtils.whenOnce(() => view.navigating, () => handle.remove());

Method Overview

Name Return Type Summary Object
FrameTaskHandle

Registers a frame task.

scheduling
Object

Schedules the execution of a callback function at the next web browser tick.

scheduling

Method Details

addFrameTask

Method
addFrameTask(phases){FrameTaskHandle}static

Registers a frame task. An animation frame is composed of different phases to let various actors execute code before, after, or during the rendering of MapView or SceneView.

Parameter

The callbacks for each phase of the frame.

Returns
Type Description
FrameTaskHandle A handle to remove, pause, or resume the frame task.
Example
// Animate the scene view camera heading in every frame
let handle = scheduling.addFrameTask({
  update: function() {
    let camera = view.camera.clone();
    camera.heading += 0.2;
    view.camera = camera;
  }
});

// Remove frame task as soon as the user starts navigating in the view
reactiveUtils.whenOnce(() => view.navigating, () => handle.remove());

schedule

Method
schedule(callback){Object}static

Schedules the execution of a callback function at the next web browser tick. Unlike addFrameTask, a scheduled callback will only run once. Scheduling a task for the next execution tick can be useful when you want to throttle/accumulate functionality over a single javascript execution context.

Parameter
callback Function

The function to call at the next tick.

Returns
Type Description
Object Returns an scheduling handler with a remove() method that can be called to prevent the callback to be called at the next tick.
Property Type Description
remove Function When called, removes the callback from the callbacks queue.
Example
// Use scheduling.schedule to log an error message at most once per tick
let logErrorHandle;

function logError(error) {
  if (!logErrorHandle) {
    logErrorHandle = scheduling.schedule(function() {
      console.error(error);
      logErrorHandle = null;
    });
  }
});

Type Definitions

FrameTaskHandle

Type Definition
FrameTaskHandle Object

An object to remove or pause a frame task registered with addFrameTask().

Properties
pause Function

Pause the execution the frame task at every frame.

resume Function

Resumes the execution the frame task.

remove Function

Removes the frame task.

PhaseCallback

Type Definition
PhaseCallback(event)

A function called at a specific phase of the animation frame.

Parameter
event PhaseEvent
optional

An object with timing information.

PhaseCallbacks

Type Definition
PhaseCallbacks Object

A set of callbacks that will be called at specific phases of the animation frame.

Properties
prepare PhaseCallback
optional

A callback called before rendering.

render PhaseCallback
optional

A callback to execute rendering logic.

update PhaseCallback
optional

A callback to execute state update logic.

PhaseEvent

Type Definition
PhaseEvent Object

An object with timing information.

Properties
time Number

The absolute time at the start of the current animation frame.

deltaTime Number

The elapsed time since the last animation frame.

elapsedFrameTime Number

The amount of time spent within the current animation frame. This can be used for budgeting (e.g. some tasks may already have run).

Your browser is no longer supported. Please upgrade your browser for the best experience. See our browser deprecation post for more details.