On this page

Class ArrowLayerWeather Plus

Extended version of TileLayer, which does arrow-based animation on top the data. The standard raster visualization of TileLayer can be used simultaneously over the same data.

Hierarchy (View Summary)

Index

Constructors

Properties

camera: Camera

Camera used to render the tiles

dataMaxZoom: number
dataMinZoom: number
extentScale: number

ratio to wich the extent is enlarged when using the method .getVisibleExtent()

getMapOrThrow: () => Map

The map is available only after the layer is attached to the map The method simplifies the access to the map object

getRendererOrThrow: () => WebGLRenderer

The renderer is available only after the layer is attached to the map The method simplifies the access to the renderer object

globeTilesService: GlobeTilesService

Globe related changes

id: string

A unique layer id.

isReady: boolean
map: Map | null

Instance of MapTiler SDK map

renderer: WebGLRenderer | null

Renderer to render the tiles

renderingMode: "3d"

Either "2d" or "3d". Defaults to "2d".

rng: SeededRandomGenerator = ...
scene: Scene

Scene to add the tiles to

slippyTiles: Mesh<
    BufferGeometry<NormalBufferAttributes, BufferGeometryEventMap>,
    Material | Material[],
    Object3DEventMap,
>[][]

Array of array of Tiles (plane geometry meshes)

slippyTilesGroup: Group<Object3DEventMap>
threeWorldGroup: Group<Object3DEventMap>
type: "custom"

The layer's type. Must be "custom".

captureRejections: boolean

Value: boolean

Change the default captureRejections option on all new EventEmitter objects.

v13.4.0, v12.16.0

captureRejectionSymbol: typeof captureRejectionSymbol

Value: Symbol.for('nodejs.rejection')

See how to write a custom rejection handler.

v13.4.0, v12.16.0

defaultMaxListeners: number

By default, a maximum of 10 listeners can be registered for any single event. This limit can be changed for individual EventEmitter instances using the emitter.setMaxListeners(n) method. To change the default for allEventEmitter instances, the events.defaultMaxListeners property can be used. If this value is not a positive number, a RangeError is thrown.

Take caution when setting the events.defaultMaxListeners because the change affects all EventEmitter instances, including those created before the change is made. However, calling emitter.setMaxListeners(n) still has precedence over events.defaultMaxListeners.

This is not a hard limit. The EventEmitter instance will allow more listeners to be added but will output a trace warning to stderr indicating that a "possible EventEmitter memory leak" has been detected. For any single EventEmitter, the emitter.getMaxListeners() and emitter.setMaxListeners() methods can be used to temporarily avoid this warning:

import { EventEmitter } from 'node:events';
const emitter = new EventEmitter();
emitter.setMaxListeners(emitter.getMaxListeners() + 1);
emitter.once('event', () => {
  // do stuff
  emitter.setMaxListeners(Math.max(emitter.getMaxListeners() - 1, 0));
});

The --trace-warnings command-line flag can be used to display the stack trace for such warnings.

The emitted warning can be inspected with process.on('warning') and will have the additional emitter, type, and count properties, referring to the event emitter instance, the event's name and the number of attached listeners, respectively. Its name property is set to 'MaxListenersExceededWarning'.

v0.11.2

errorMonitor: typeof errorMonitor

This symbol shall be used to install a listener for only monitoring 'error' events. Listeners installed using this symbol are called before the regular 'error' listeners are called.

Installing a listener using this symbol does not change the behavior once an 'error' event is emitted. Therefore, the process will still crash if no regular 'error' listener is installed.

v13.6.0, v12.17.0

Methods

  • Type Parameters

    • K

    Parameters

    • error: Error
    • event: string | symbol
    • ...args: AnyRest

    Returns void

  • Add a new TimeFrame information to the animation. If the frame container is not empty, then the provided TimeFrame data will be added at the corresct position based on its time.

    Parameters

    • time: number
    • data: TileTextureSource

    Returns void

  • Alias for emitter.on(eventName, listener).

    Type Parameters

    • K

    Parameters

    • eventName: string | symbol
    • listener: (...args: any[]) => void

    Returns this

    v0.1.26

  • Adds another frame to the animation.

    Parameters

    • time: number

      Time of the data in this frame. Should be unique.

    • url: string

      URL to the tiles. Expected to have {zxy} placeholder to be dynamically replaced with z/x/y coordinates.

    • OptionalloadedCallback: ((tile: Tile, url?: string, error?: ErrorEvent | null) => void) | null

    Returns void

  • Changes the speed of the animation. 0 to stop. The speed is in number of real world milliseconds per animation second. Example: if timePerSecond is set to 10*1000, then the animation will run 10x of real world speed.

    Parameters

    • timePerSecond: number

    Returns void

  • Animate by a factor of real life speed. Exampe, if factor is 10, then the animation will play at 10 times the real life speed.

    Parameters

    • factor: number

    Returns void

  • Make the animation time progress based on the current timestamps.

    Returns void

  • Get the current mixed image as a ImageData, meaning with pixel data, width, height and number of channels Used by: Weather Plus

    Parameters

    • __namedParameters: { blurKernel?: number; channel?: string; outputSize?: number; zxy?: string }

    Returns ImageData | null

    ImageData | null

  • Synchronously calls each of the listeners registered for the event named eventName, in the order they were registered, passing the supplied arguments to each.

    Returns true if the event had listeners, false otherwise.

    import { EventEmitter } from 'node:events';
    const myEmitter = new EventEmitter();
    
    // First listener
    myEmitter.on('event', function firstListener() {
      console.log('Helloooo! first listener');
    });
    // Second listener
    myEmitter.on('event', function secondListener(arg1, arg2) {
      console.log(`event with parameters ${arg1}, ${arg2} in second listener`);
    });
    // Third listener
    myEmitter.on('event', function thirdListener(...args) {
      const parameters = args.join(', ');
      console.log(`event with parameters ${parameters} in third listener`);
    });
    
    console.log(myEmitter.listeners('event'));
    
    myEmitter.emit('event', 1, 2, 3, 4, 5);
    
    // Prints:
    // [
    //   [Function: firstListener],
    //   [Function: secondListener],
    //   [Function: thirdListener]
    // ]
    // Helloooo! first listener
    // event with parameters 1, 2 in second listener
    // event with parameters 1, 2, 3, 4, 5 in third listener
    

    Type Parameters

    • K

    Parameters

    • eventName: string | symbol
    • ...args: AnyRest

    Returns boolean

    v0.1.26

  • Returns an array listing the events for which the emitter has registered listeners. The values in the array are strings or Symbols.

    import { EventEmitter } from 'node:events';
    
    const myEE = new EventEmitter();
    myEE.on('foo', () => {});
    myEE.on('bar', () => {});
    
    const sym = Symbol('symbol');
    myEE.on(sym, () => {});
    
    console.log(myEE.eventNames());
    // Prints: [ 'foo', 'bar', Symbol(symbol) ]
    

    Returns (string | symbol)[]

    v6.0.0

  • The method simplifies the access to the triggerRepaint method

    Returns void

  • Call a function for each TimeFrame of the animation

    Parameters

    • action: (frame: TimeFrame<TileTextureSource>) => void

    Returns void

  • Get the end time of the animation or -Infinity if empty.

    Returns number

  • Get the speed of the animation. The speed is in number of real world seconds per animation second.

    Returns number

  • Get the time of the first TimeFrame (always the begining of the animation). If the frame container is empty, returns Infinity

    Returns number

  • Based on the current animation time, retrieve the frame immediately before (frameA), the frame immediately after (frameB) and the mix. The mixe value is in the interval [0, 1], where close to 0 means the current time is close to frameA and close to 1 means the current time is close to frameB. The mix value is provided so that linear interpolation of data can be performed.

    Returns {
        frameA: TimeFrame<TileTextureSource> | null;
        frameB: TimeFrame<TileTextureSource> | null;
        mix: number;
    }

  • Providing a TimeFrame (time + data), get the TimeFrame from the annimation that is directly after (when direction is positive) or immediately before (when direction is negative)

    Parameters

    • frame: TimeFrame<TileTextureSource>
    • direction: number

    Returns TimeFrame<TileTextureSource> | null

  • Returns the ratio between the number of actually visible particles (to satisfy the specified density) and the maximum amount (maxAmount). Values >1 mean that more particles would be utilised if available. Useful for debugging and fine-tuning client applications.

    Returns number

  • TODO: Add description

    Parameters

    • frameA: TimeFrame<TileTextureSource>
    • frameB: TimeFrame<TileTextureSource>
    • tileId: string

    Returns { tileA: TilePlacement; tileB: TilePlacement } | null

  • Get the Extent as defined in OL

    Parameters

    • Optionalscale: number

    Returns Extent | null

  • Get the list of all the tiles wanted for this extent and from the min zoom to the max zoom. This is used to prevent updating tiles that are not in this list in .updateSlippyTile()

    Parameters

    • currentZ: number
    • minZoom: number
    • maxZoom: number

    Returns TileList

  • Tells whether the animation is currently playing

    Returns boolean

  • Returns the number of listeners listening for the event named eventName. If listener is provided, it will return how many times the listener is found in the list of the listeners of the event.

    Type Parameters

    • K

    Parameters

    • eventName: string | symbol

      The name of the event being listened for

    • Optionallistener: Function

      The event handler function

    Returns number

    v3.2.0

  • Returns a copy of the array of listeners for the event named eventName.

    server.on('connection', (stream) => {
      console.log('someone connected!');
    });
    console.log(util.inspect(server.listeners('connection')));
    // Prints: [ [Function] ]
    

    Type Parameters

    • K

    Parameters

    • eventName: string | symbol

    Returns Function[]

    v0.1.26

  • Alias for emitter.removeListener().

    Type Parameters

    • K

    Parameters

    • eventName: string | symbol
    • listener: (...args: any[]) => void

    Returns this

    v10.0.0

  • Adds the listener function to the end of the listeners array for the event named eventName. No checks are made to see if the listener has already been added. Multiple calls passing the same combination of eventName and listener will result in the listener being added, and called, multiple times.

    server.on('connection', (stream) => {
      console.log('someone connected!');
    });
    

    Returns a reference to the EventEmitter, so that calls can be chained.

    By default, event listeners are invoked in the order they are added. The emitter.prependListener() method can be used as an alternative to add the event listener to the beginning of the listeners array.

    import { EventEmitter } from 'node:events';
    const myEE = new EventEmitter();
    myEE.on('foo', () => console.log('a'));
    myEE.prependListener('foo', () => console.log('b'));
    myEE.emit('foo');
    // Prints:
    //   b
    //   a
    

    Type Parameters

    • K

    Parameters

    • eventName: string | symbol

      The name of the event.

    • listener: (...args: any[]) => void

      The callback function

    Returns this

    v0.1.101

  • Method from CustomLayerInterface, called when the layer is added to the map

    Parameters

    • map: any
    • gl: WebGLRenderingContext | WebGL2RenderingContext

    Returns void

  • Adds a one-time listener function for the event named eventName. The next time eventName is triggered, this listener is removed and then invoked.

    server.once('connection', (stream) => {
      console.log('Ah, we have our first user!');
    });
    

    Returns a reference to the EventEmitter, so that calls can be chained.

    By default, event listeners are invoked in the order they are added. The emitter.prependOnceListener() method can be used as an alternative to add the event listener to the beginning of the listeners array.

    import { EventEmitter } from 'node:events';
    const myEE = new EventEmitter();
    myEE.once('foo', () => console.log('a'));
    myEE.prependOnceListener('foo', () => console.log('b'));
    myEE.emit('foo');
    // Prints:
    //   b
    //   a
    

    Type Parameters

    • K

    Parameters

    • eventName: string | symbol

      The name of the event.

    • listener: (...args: any[]) => void

      The callback function

    Returns this

    v0.3.0

  • Returns void

    Event handler - callback when the map is moved.

  • Returns void

    Event handler - called when the map movement ends.

  • Parameters

    • event: MapProjectionEvent

    Returns void

    Event handler - called when projection is changed

  • The method is called when the layer is removed from the map CustomLayerInterface method

    Parameters

    • _map: Map
    • _gl: WebGLRenderingContext | WebGL2RenderingContext

    Returns void

  • Returns void

    Event handler - callback when the window is resized.

  • Picks the best currently available values at the position.

    The values are read from the already loaded tiles at the current time.

    Return the interpolated array of decoded values of the same length as the number of specified coloring fragments.

    If the coloring fragments uses more channels (e.g. "rg"), the corresponding value is an array of [r value, g value, sqrt(r^2 + g^2)].

    Parameters

    • lng: number
    • lat: number
    • Optionaloptions: { bilinear?: boolean; highestRes?: boolean; load?: boolean }
      • Optionalbilinear?: boolean

        Enable bilinear interpolation if true, otherwise, the picking will be based on the nearest neighbor (NN) pixel. NN has less impact on performance because it requires less texture reading, so it is generaly faster. Bilinear is more precise and will retrieve values that are closer to what is being displayed (since tiles are rendered using a native-GPU bilinear method) Default: false

      • OptionalhighestRes?: boolean

        If true, the picking will be perfomed on the highest resolution tile available. If false, the picking is done on the tile currently showing on the map.

      • Optionalload?: boolean

        Will force the loading of the tile if it was not already cached. Usually unnecesary when the picking is done from hovering the pointer on the map, unless the option .highRes is true. Default: false.

    Returns number[] | null

    Array of decoded interpolated values. In case of using a multi-channel coloring fragment, the returned value is an array where the first value is the value and the second is the category

  • Adds the listener function to the beginning of the listeners array for the event named eventName. No checks are made to see if the listener has already been added. Multiple calls passing the same combination of eventName and listener will result in the listener being added, and called, multiple times.

    server.prependListener('connection', (stream) => {
      console.log('someone connected!');
    });
    

    Returns a reference to the EventEmitter, so that calls can be chained.

    Type Parameters

    • K

    Parameters

    • eventName: string | symbol

      The name of the event.

    • listener: (...args: any[]) => void

      The callback function

    Returns this

    v6.0.0

  • Adds a one-timelistener function for the event named eventName to the beginning of the listeners array. The next time eventName is triggered, this listener is removed, and then invoked.

    server.prependOnceListener('connection', (stream) => {
      console.log('Ah, we have our first user!');
    });
    

    Returns a reference to the EventEmitter, so that calls can be chained.

    Type Parameters

    • K

    Parameters

    • eventName: string | symbol

      The name of the event.

    • listener: (...args: any[]) => void

      The callback function

    Returns this

    v6.0.0

  • CustomLayerInterface method This is used to apply the map matrix to the local camera

    Parameters

    • _gl: WebGLRenderingContext | WebGL2RenderingContext
    • options: CustomRenderMethodInput

    Returns void

  • Returns a copy of the array of listeners for the event named eventName, including any wrappers (such as those created by .once()).

    import { EventEmitter } from 'node:events';
    const emitter = new EventEmitter();
    emitter.once('log', () => console.log('log once'));
    
    // Returns a new Array with a function `onceWrapper` which has a property
    // `listener` which contains the original listener bound above
    const listeners = emitter.rawListeners('log');
    const logFnWrapper = listeners[0];
    
    // Logs "log once" to the console and does not unbind the `once` event
    logFnWrapper.listener();
    
    // Logs "log once" to the console and removes the listener
    logFnWrapper();
    
    emitter.on('log', () => console.log('log persistently'));
    // Will return a new Array with a single function bound by `.on()` above
    const newListeners = emitter.rawListeners('log');
    
    // Logs "log persistently" twice
    newListeners[0]();
    emitter.emit('log');
    

    Type Parameters

    • K

    Parameters

    • eventName: string | symbol

    Returns Function[]

    v9.4.0

  • Called by onMoveEnd in parent class.

    Returns void

  • Wrapping telemetry registration with protected method to allow registration of modules which extends this class

    Parameters

    • map: Map

    Returns void

  • Removes all listeners, or those of the specified eventName.

    It is bad practice to remove listeners added elsewhere in the code, particularly when the EventEmitter instance was created by some other component or module (e.g. sockets or file streams).

    Returns a reference to the EventEmitter, so that calls can be chained.

    Parameters

    • OptionaleventName: string | symbol

    Returns this

    v0.1.26

  • Remove a frame using its time as an ID

    Parameters

    • time: number

    Returns TimeFrame<TileTextureSource>[]

  • Removes the specified listener from the listener array for the event named eventName.

    const callback = (stream) => {
      console.log('someone connected!');
    };
    server.on('connection', callback);
    // ...
    server.removeListener('connection', callback);
    

    removeListener() will remove, at most, one instance of a listener from the listener array. If any single listener has been added multiple times to the listener array for the specified eventName, then removeListener() must be called multiple times to remove each instance.

    Once an event is emitted, all listeners attached to it at the time of emitting are called in order. This implies that any removeListener() or removeAllListeners() calls after emitting and before the last listener finishes execution will not remove them fromemit() in progress. Subsequent events behave as expected.

    import { EventEmitter } from 'node:events';
    class MyEmitter extends EventEmitter {}
    const myEmitter = new MyEmitter();
    
    const callbackA = () => {
      console.log('A');
      myEmitter.removeListener('event', callbackB);
    };
    
    const callbackB = () => {
      console.log('B');
    };
    
    myEmitter.on('event', callbackA);
    
    myEmitter.on('event', callbackB);
    
    // callbackA removes listener callbackB but it will still be called.
    // Internal listener array at time of emit [callbackA, callbackB]
    myEmitter.emit('event');
    // Prints:
    //   A
    //   B
    
    // callbackB is now removed.
    // Internal listener array [callbackA]
    myEmitter.emit('event');
    // Prints:
    //   A
    

    Because listeners are managed using an internal array, calling this will change the position indices of any listener registered after the listener being removed. This will not impact the order in which listeners are called, but it means that any copies of the listener array as returned by the emitter.listeners() method will need to be recreated.

    When a single function has been added as a handler multiple times for a single event (as in the example below), removeListener() will remove the most recently added instance. In the example the once('ping') listener is removed:

    import { EventEmitter } from 'node:events';
    const ee = new EventEmitter();
    
    function pong() {
      console.log('pong');
    }
    
    ee.on('ping', pong);
    ee.once('ping', pong);
    ee.removeListener('ping', pong);
    
    ee.emit('ping');
    ee.emit('ping');
    

    Returns a reference to the EventEmitter, so that calls can be chained.

    Type Parameters

    • K

    Parameters

    • eventName: string | symbol
    • listener: (...args: any[]) => void

    Returns this

    v0.1.26

  • Removes frame

    Parameters

    • time: number

    Returns void

  • CustomLayerInterface method It is used to render the local tiles into the MapTiler SDK context

    Parameters

    • _gl: WebGLRenderingContext | WebGL2RenderingContext
    • _options: CustomRenderMethodInput

    Returns void

  • Change the visualization to a specific time. Does not stop animation.

    Parameters

    • time: number

    Returns void

  • Set the minimum arrow size at zero wind speed. This keeps gl_PointSize non-zero so the temporal accumulation buffer remains stable in calm areas.

    Parameters

    • s: number

      Minimum size in logical pixels.

    Returns void

  • Set the maximum arrow size (at full wind speed). Due to WebGL limitation, the max size is often 64 pixels on low-DPR monitors and 32 on HiDPI.

    Parameters

    • s: number

      Size in logical pixels.

    Returns void

  • Enable smoothing category color when true. Hard edge between categories when false. This seeting applies only to TileLayers using MultiChannelGradientColoringFragment as the other types of oloring fragment do not use categories.

    Parameters

    • cst: boolean

    Returns void

  • Set the density of the arrows. The maximum value is bounded by the constructor parameter maxAmount.

    Parameters

    • d: number

      Density in arrows per 1000 px².

    Returns void

  • Set the normalised speed threshold at which the arrow color fully transitions from color to fastColor.

    Parameters

    • fsn: number

      Value in [0, 1] (0 = always fast color, 1 = only at max wind speed).

    Returns void

  • If true, enables the local smoothing

    Parameters

    • s: boolean

    Returns void

  • By default EventEmitters will print a warning if more than 10 listeners are added for a particular event. This is a useful default that helps finding memory leaks. The emitter.setMaxListeners() method allows the limit to be modified for this specific EventEmitter instance. The value can be set to Infinity (or 0) to indicate an unlimited number of listeners.

    Returns a reference to the EventEmitter, so that calls can be chained.

    Parameters

    • n: number

    Returns this

    v0.3.5

  • Defines the size of the smoothing kernel

    Parameters

    • d: number

    Returns void

  • Set the wind speed (in the same units as decodeMax) that maps to speedNorm = 1.0. Arrows reach full opacity and size at this speed.

    Parameters

    • mws: number

      Max wind speed in data units.

    Returns void

  • Set the opacity of the layer.

    Parameters

    • opacity: number

    Returns void

  • Parameters

    • s: number

    Returns void

  • Define the refresh interval of the particle in ms.

    Parameters

    • ri: number

    Returns void

  • If true, even the paused animation is rendered up to 60 times per seconds. If false, the rendering is paused when the animation is paused. Pausing the animation has side effects:

    • it lowers energy consumtion
    • it prevents overheating
    • it pauses time-independant annimation (arrows, particles)

    Parameters

    • r: boolean

    Returns void

  • Defines by what factor the smoothing kernel size is reduced with increasing zoom level

    Parameters

    • f: number

    Returns void

  • Enables data interpolation between keyframes when true. Only shows keyframe data when false.

    Parameters

    • ti: boolean

    Returns void

  • WARNING: Mercator projection only

    Update the tile's mesh position and size, as well each tile material uniforms (time, texture, etc.)

    Returns void

  • Listens once to the abort event on the provided signal.

    Listening to the abort event on abort signals is unsafe and may lead to resource leaks since another third party with the signal can call e.stopImmediatePropagation(). Unfortunately Node.js cannot change this since it would violate the web standard. Additionally, the original API makes it easy to forget to remove listeners.

    This API allows safely using AbortSignals in Node.js APIs by solving these two issues by listening to the event such that stopImmediatePropagation does not prevent the listener from running.

    Returns a disposable so that it may be unsubscribed from more easily.

    import { addAbortListener } from 'node:events';
    
    function example(signal) {
      let disposable;
      try {
        signal.addEventListener('abort', (e) => e.stopImmediatePropagation());
        disposable = addAbortListener(signal, (e) => {
          // Do something when signal is aborted.
        });
      } finally {
        disposable?.[Symbol.dispose]();
      }
    }
    

    Parameters

    • signal: AbortSignal
    • resource: (event: Event) => void

    Returns Disposable

    Disposable that removes the abort listener.

    v20.5.0

  • Returns a copy of the array of listeners for the event named eventName.

    For EventEmitters this behaves exactly the same as calling .listeners on the emitter.

    For EventTargets this is the only way to get the event listeners for the event target. This is useful for debugging and diagnostic purposes.

    import { getEventListeners, EventEmitter } from 'node:events';
    
    {
      const ee = new EventEmitter();
      const listener = () => console.log('Events are fun');
      ee.on('foo', listener);
      console.log(getEventListeners(ee, 'foo')); // [ [Function: listener] ]
    }
    {
      const et = new EventTarget();
      const listener = () => console.log('Events are fun');
      et.addEventListener('foo', listener);
      console.log(getEventListeners(et, 'foo')); // [ [Function: listener] ]
    }
    

    Parameters

    • emitter: EventEmitter<DefaultEventMap> | EventTarget
    • name: string | symbol

    Returns Function[]

    v15.2.0, v14.17.0

  • Returns the currently set max amount of listeners.

    For EventEmitters this behaves exactly the same as calling .getMaxListeners on the emitter.

    For EventTargets this is the only way to get the max event listeners for the event target. If the number of event handlers on a single EventTarget exceeds the max set, the EventTarget will print a warning.

    import { getMaxListeners, setMaxListeners, EventEmitter } from 'node:events';
    
    {
      const ee = new EventEmitter();
      console.log(getMaxListeners(ee)); // 10
      setMaxListeners(11, ee);
      console.log(getMaxListeners(ee)); // 11
    }
    {
      const et = new EventTarget();
      console.log(getMaxListeners(et)); // 10
      setMaxListeners(11, et);
      console.log(getMaxListeners(et)); // 11
    }
    

    Parameters

    • emitter: EventEmitter<DefaultEventMap> | EventTarget

    Returns number

    v19.9.0

  • A class method that returns the number of listeners for the given eventName registered on the given emitter.

    import { EventEmitter, listenerCount } from 'node:events';
    
    const myEmitter = new EventEmitter();
    myEmitter.on('event', () => {});
    myEmitter.on('event', () => {});
    console.log(listenerCount(myEmitter, 'event'));
    // Prints: 2
    

    Parameters

    • emitter: EventEmitter

      The emitter to query

    • eventName: string | symbol

      The event name

    Returns number

    v0.9.12

    Since v3.2.0 - Use listenerCount instead.

  • import { on, EventEmitter } from 'node:events';
    import process from 'node:process';
    
    const ee = new EventEmitter();
    
    // Emit later on
    process.nextTick(() => {
      ee.emit('foo', 'bar');
      ee.emit('foo', 42);
    });
    
    for await (const event of on(ee, 'foo')) {
      // The execution of this inner block is synchronous and it
      // processes one event at a time (even with await). Do not use
      // if concurrent execution is required.
      console.log(event); // prints ['bar'] [42]
    }
    // Unreachable here
    

    Returns an AsyncIterator that iterates eventName events. It will throw if the EventEmitter emits 'error'. It removes all listeners when exiting the loop. The value returned by each iteration is an array composed of the emitted event arguments.

    An AbortSignal can be used to cancel waiting on events:

    import { on, EventEmitter } from 'node:events';
    import process from 'node:process';
    
    const ac = new AbortController();
    
    (async () => {
      const ee = new EventEmitter();
    
      // Emit later on
      process.nextTick(() => {
        ee.emit('foo', 'bar');
        ee.emit('foo', 42);
      });
    
      for await (const event of on(ee, 'foo', { signal: ac.signal })) {
        // The execution of this inner block is synchronous and it
        // processes one event at a time (even with await). Do not use
        // if concurrent execution is required.
        console.log(event); // prints ['bar'] [42]
      }
      // Unreachable here
    })();
    
    process.nextTick(() => ac.abort());
    

    Use the close option to specify an array of event names that will end the iteration:

    import { on, EventEmitter } from 'node:events';
    import process from 'node:process';
    
    const ee = new EventEmitter();
    
    // Emit later on
    process.nextTick(() => {
      ee.emit('foo', 'bar');
      ee.emit('foo', 42);
      ee.emit('close');
    });
    
    for await (const event of on(ee, 'foo', { close: ['close'] })) {
      console.log(event); // prints ['bar'] [42]
    }
    // the loop will exit after 'close' is emitted
    console.log('done'); // prints 'done'
    

    Parameters

    • emitter: EventEmitter
    • eventName: string | symbol
    • Optionaloptions: StaticEventEmitterIteratorOptions

    Returns AsyncIterator<any[]>

    An AsyncIterator that iterates eventName events emitted by the emitter

    v13.6.0, v12.16.0

  • import { on, EventEmitter } from 'node:events';
    import process from 'node:process';
    
    const ee = new EventEmitter();
    
    // Emit later on
    process.nextTick(() => {
      ee.emit('foo', 'bar');
      ee.emit('foo', 42);
    });
    
    for await (const event of on(ee, 'foo')) {
      // The execution of this inner block is synchronous and it
      // processes one event at a time (even with await). Do not use
      // if concurrent execution is required.
      console.log(event); // prints ['bar'] [42]
    }
    // Unreachable here
    

    Returns an AsyncIterator that iterates eventName events. It will throw if the EventEmitter emits 'error'. It removes all listeners when exiting the loop. The value returned by each iteration is an array composed of the emitted event arguments.

    An AbortSignal can be used to cancel waiting on events:

    import { on, EventEmitter } from 'node:events';
    import process from 'node:process';
    
    const ac = new AbortController();
    
    (async () => {
      const ee = new EventEmitter();
    
      // Emit later on
      process.nextTick(() => {
        ee.emit('foo', 'bar');
        ee.emit('foo', 42);
      });
    
      for await (const event of on(ee, 'foo', { signal: ac.signal })) {
        // The execution of this inner block is synchronous and it
        // processes one event at a time (even with await). Do not use
        // if concurrent execution is required.
        console.log(event); // prints ['bar'] [42]
      }
      // Unreachable here
    })();
    
    process.nextTick(() => ac.abort());
    

    Use the close option to specify an array of event names that will end the iteration:

    import { on, EventEmitter } from 'node:events';
    import process from 'node:process';
    
    const ee = new EventEmitter();
    
    // Emit later on
    process.nextTick(() => {
      ee.emit('foo', 'bar');
      ee.emit('foo', 42);
      ee.emit('close');
    });
    
    for await (const event of on(ee, 'foo', { close: ['close'] })) {
      console.log(event); // prints ['bar'] [42]
    }
    // the loop will exit after 'close' is emitted
    console.log('done'); // prints 'done'
    

    Parameters

    • emitter: EventTarget
    • eventName: string
    • Optionaloptions: StaticEventEmitterIteratorOptions

    Returns AsyncIterator<any[]>

    An AsyncIterator that iterates eventName events emitted by the emitter

    v13.6.0, v12.16.0

  • Creates a Promise that is fulfilled when the EventEmitter emits the given event or that is rejected if the EventEmitter emits 'error' while waiting. The Promise will resolve with an array of all the arguments emitted to the given event.

    This method is intentionally generic and works with the web platform EventTarget interface, which has no special'error' event semantics and does not listen to the 'error' event.

    import { once, EventEmitter } from 'node:events';
    import process from 'node:process';
    
    const ee = new EventEmitter();
    
    process.nextTick(() => {
      ee.emit('myevent', 42);
    });
    
    const [value] = await once(ee, 'myevent');
    console.log(value);
    
    const err = new Error('kaboom');
    process.nextTick(() => {
      ee.emit('error', err);
    });
    
    try {
      await once(ee, 'myevent');
    } catch (err) {
      console.error('error happened', err);
    }
    

    The special handling of the 'error' event is only used when events.once() is used to wait for another event. If events.once() is used to wait for the 'error' event itself, then it is treated as any other kind of event without special handling:

    import { EventEmitter, once } from 'node:events';
    
    const ee = new EventEmitter();
    
    once(ee, 'error')
      .then(([err]) => console.log('ok', err.message))
      .catch((err) => console.error('error', err.message));
    
    ee.emit('error', new Error('boom'));
    
    // Prints: ok boom
    

    An AbortSignal can be used to cancel waiting for the event:

    import { EventEmitter, once } from 'node:events';
    
    const ee = new EventEmitter();
    const ac = new AbortController();
    
    async function foo(emitter, event, signal) {
      try {
        await once(emitter, event, { signal });
        console.log('event emitted!');
      } catch (error) {
        if (error.name === 'AbortError') {
          console.error('Waiting for the event was canceled!');
        } else {
          console.error('There was an error', error.message);
        }
      }
    }
    
    foo(ee, 'foo', ac.signal);
    ac.abort(); // Abort waiting for the event
    ee.emit('foo'); // Prints: Waiting for the event was canceled!
    

    Parameters

    • emitter: EventEmitter
    • eventName: string | symbol
    • Optionaloptions: StaticEventEmitterOptions

    Returns Promise<any[]>

    v11.13.0, v10.16.0

  • Creates a Promise that is fulfilled when the EventEmitter emits the given event or that is rejected if the EventEmitter emits 'error' while waiting. The Promise will resolve with an array of all the arguments emitted to the given event.

    This method is intentionally generic and works with the web platform EventTarget interface, which has no special'error' event semantics and does not listen to the 'error' event.

    import { once, EventEmitter } from 'node:events';
    import process from 'node:process';
    
    const ee = new EventEmitter();
    
    process.nextTick(() => {
      ee.emit('myevent', 42);
    });
    
    const [value] = await once(ee, 'myevent');
    console.log(value);
    
    const err = new Error('kaboom');
    process.nextTick(() => {
      ee.emit('error', err);
    });
    
    try {
      await once(ee, 'myevent');
    } catch (err) {
      console.error('error happened', err);
    }
    

    The special handling of the 'error' event is only used when events.once() is used to wait for another event. If events.once() is used to wait for the 'error' event itself, then it is treated as any other kind of event without special handling:

    import { EventEmitter, once } from 'node:events';
    
    const ee = new EventEmitter();
    
    once(ee, 'error')
      .then(([err]) => console.log('ok', err.message))
      .catch((err) => console.error('error', err.message));
    
    ee.emit('error', new Error('boom'));
    
    // Prints: ok boom
    

    An AbortSignal can be used to cancel waiting for the event:

    import { EventEmitter, once } from 'node:events';
    
    const ee = new EventEmitter();
    const ac = new AbortController();
    
    async function foo(emitter, event, signal) {
      try {
        await once(emitter, event, { signal });
        console.log('event emitted!');
      } catch (error) {
        if (error.name === 'AbortError') {
          console.error('Waiting for the event was canceled!');
        } else {
          console.error('There was an error', error.message);
        }
      }
    }
    
    foo(ee, 'foo', ac.signal);
    ac.abort(); // Abort waiting for the event
    ee.emit('foo'); // Prints: Waiting for the event was canceled!
    

    Parameters

    • emitter: EventTarget
    • eventName: string
    • Optionaloptions: StaticEventEmitterOptions

    Returns Promise<any[]>

    v11.13.0, v10.16.0

  • import { setMaxListeners, EventEmitter } from 'node:events';
    
    const target = new EventTarget();
    const emitter = new EventEmitter();
    
    setMaxListeners(5, target, emitter);
    

    Parameters

    • Optionaln: number

      A non-negative number. The maximum number of listeners per EventTarget event.

    • ...eventTargets: (EventEmitter<DefaultEventMap> | EventTarget)[]

      Zero or more {EventTarget} or {EventEmitter} instances. If none are specified, n is set as the default max for all newly created {EventTarget} and {EventEmitter} objects.

    Returns void

    v15.4.0

Was this helpful?
SDK JS
Modules
Reference
classes
ArrowLayer