---
title: "once | JavaScript maps SDK"
description: "Documentation for MapTiler SDK"
---

> For AI agents: a documentation index is available at [/llms.txt](https://docs-beta-4y5.pages.dev/llms.txt). Markdown versions of all pages are available by appending .md to any URL.

# Function once

-   once(  
        emitter: [EventEmitter](https://docs-beta-4y5.pages.dev/sdk-js/api-reference/classes/Externals.EventEmitter/),  
        eventName: string | symbol,  
        options?: [OnceOptions](https://docs-beta-4y5.pages.dev/sdk-js/api-reference/interfaces/Externals.EventEmitter.OnceOptions/),  
    ): Promise<any\[\]\>[](#once)
    
    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\]\[WHATWG-EventTarget\] interface, which has no special `'error'` event semantics and does not listen to the `'error'` event.
    
    ```typescript
    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:
    
    ```typescript
    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:
    
    ```typescript
    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(); // Prints: Waiting for the event was canceled!
    ```
    
    #### Parameters
    
    -   emitter: [EventEmitter](https://docs-beta-4y5.pages.dev/sdk-js/api-reference/classes/Externals.EventEmitter/)
    -   eventName: string | symbol
    -   `Optional`options: [OnceOptions](https://docs-beta-4y5.pages.dev/sdk-js/api-reference/interfaces/Externals.EventEmitter.OnceOptions/)
    
    #### Returns Promise<any\[\]\>
    
    #### Since[](#since)
    
    v11.13.0, v10.16.0
    
-   once(  
        emitter: EventTarget,  
        eventName: string,  
        options?: [OnceOptions](https://docs-beta-4y5.pages.dev/sdk-js/api-reference/interfaces/Externals.EventEmitter.OnceOptions/),  
    ): Promise<any\[\]\>[](#once-1)
    
    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\]\[WHATWG-EventTarget\] interface, which has no special `'error'` event semantics and does not listen to the `'error'` event.
    
    ```typescript
    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:
    
    ```typescript
    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:
    
    ```typescript
    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(); // Prints: Waiting for the event was canceled!
    ```
    
    #### Parameters
    
    -   emitter: EventTarget
    -   eventName: string
    -   `Optional`options: [OnceOptions](https://docs-beta-4y5.pages.dev/sdk-js/api-reference/interfaces/Externals.EventEmitter.OnceOptions/)
    
    #### Returns Promise<any\[\]\>
    
    #### Since[](#since-1)
    
    v11.13.0, v10.16.0
