Options
All
  • Public
  • Public/Protected
  • All
Menu

This object is created internally and returned from {@link request}. It represents an in-progress request whose header has already been queued. The header is still mutable using the setHeader(name, value),getHeader(name), removeHeader(name) API. The actual header will be sent along with the first data chunk or when calling request.end().

To get the response, add a listener for 'response' to the request object.'response' will be emitted from the request object when the response headers have been received. The 'response' event is executed with one argument which is an instance of IncomingMessage.

During the 'response' event, one can add listeners to the response object; particularly to listen for the 'data' event.

If no 'response' handler is added, then the response will be entirely discarded. However, if a 'response' event handler is added, then the data from the response object must be consumed, either by calling response.read() whenever there is a 'readable' event, or by adding a 'data' handler, or by calling the .resume() method. Until the data is consumed, the 'end' event will not fire. Also, until the data is read it will consume memory that can eventually lead to a 'process out of memory' error.

For backward compatibility, res will only emit 'error' if there is an'error' listener registered.

Node.js does not check whether Content-Length and the length of the body which has been transmitted are equal or not.

since

v0.1.17

Hierarchy-Diagram

UML class diagram of ClientRequest

Legend

icon for a class in the UML class diagram class
icon for a public property in the UML class diagram public property
icon for a public method in the UML class diagram public method
underlined static property/method

Hierarchy

Index

Constructors

Properties

aborted: boolean

The request.aborted property will be true if the request has been aborted.

since

v0.11.14

deprecated

Since v17.0.0 - Check destroyed instead.

chunkedEncoding: boolean
connection: null | Socket

Aliases of outgoingMessage.socket

since

v0.3.0

deprecated

Since v15.12.0,v14.17.1 - Use socket instead.

destroyed: boolean

Is true after writable.destroy() has been called.

since

v8.0.0

finished: boolean
deprecated

Use writableEnded instead.

headersSent: boolean

Read-only. true if the headers were sent, otherwise false.

since

v0.9.3

host: string

The request host.

since

v14.5.0, v12.19.0

maxHeadersCount: number

Limits maximum response headers count. If set to 0, no limit will be applied.

default

2000

method: string

The request method.

since

v0.1.97

path: string

The request path.

since

v0.4.0

protocol: string

The request protocol.

since

v14.5.0, v12.19.0

reusedSocket: boolean

Whether the request is send through a reused socket.

since

v13.0.0, v12.16.0

sendDate: boolean
shouldKeepAlive: boolean
socket: null | Socket

Reference to the underlying socket. Usually, users will not want to access this property.

After calling outgoingMessage.end(), this property will be nulled.

since

v0.3.0

useChunkedEncodingByDefault: boolean
writable: boolean

Is true if it is safe to call writable.write(), which means the stream has not been destroyed, errored or ended.

since

v11.4.0

writableCorked: number

Number of times writable.uncork() needs to be called in order to fully uncork the stream.

since

v13.2.0, v12.16.0

writableEnded: boolean

Is true after writable.end() has been called. This property does not indicate whether the data has been flushed, for this use writable.writableFinished instead.

since

v12.9.0

writableFinished: boolean

Is set to true immediately before the 'finish' event is emitted.

since

v12.6.0

writableHighWaterMark: number

Return the value of highWaterMark passed when creating this Writable.

since

v9.3.0

writableLength: number

This property contains the number of bytes (or objects) in the queue ready to be written. The value provides introspection data regarding the status of the highWaterMark.

since

v9.4.0

writableObjectMode: boolean

Getter for the property objectMode of a given Writable stream.

since

v12.3.0

captureRejectionSymbol: typeof captureRejectionSymbol
captureRejections: boolean

Sets or gets the default captureRejection value for all emitters.

defaultMaxListeners: number
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.

Methods

  • abort(): void
  • Marks the request as aborting. Calling this will cause remaining data in the response to be dropped and the socket to be destroyed.

    since

    v0.3.8

    deprecated

    Since v14.1.0,v13.14.0 - Use destroy instead.

    Returns void

  • Adds HTTP trailers (headers but at the end of the message) to the message.

    Trailers are only be emitted if the message is chunked encoded. If not, the trailer will be silently discarded.

    HTTP requires the Trailer header to be sent to emit trailers, with a list of header fields in its value, e.g.

    message.writeHead(200, { 'Content-Type': 'text/plain',
    'Trailer': 'Content-MD5' });
    message.write(fileData);
    message.addTrailers({ 'Content-MD5': '7895bf4b8828b55ceaf47747b4bca667' });
    message.end();

    Attempting to set a header field name or value that contains invalid characters will result in a TypeError being thrown.

    since

    v0.3.0

    Parameters

    Returns void

  • cork(): void
  • The writable.cork() method forces all written data to be buffered in memory. The buffered data will be flushed when either the uncork or end methods are called.

    The primary intent of writable.cork() is to accommodate a situation in which several small chunks are written to the stream in rapid succession. Instead of immediately forwarding them to the underlying destination, writable.cork()buffers all the chunks until writable.uncork() is called, which will pass them all to writable._writev(), if present. This prevents a head-of-line blocking situation where data is being buffered while waiting for the first small chunk to be processed. However, use of writable.cork() without implementingwritable._writev() may have an adverse effect on throughput.

    See also: writable.uncork(), writable._writev().

    since

    v0.11.2

    Returns void

  • Destroy the stream. Optionally emit an 'error' event, and emit a 'close'event (unless emitClose is set to false). After this call, the writable stream has ended and subsequent calls to write() or end() will result in an ERR_STREAM_DESTROYED error. This is a destructive and immediate way to destroy a stream. Previous calls towrite() may not have drained, and may trigger an ERR_STREAM_DESTROYED error. Use end() instead of destroy if data should flush before close, or wait for the 'drain' event before destroying the stream.

    Once destroy() has been called any further calls will be a no-op and no further errors except from _destroy() may be emitted as 'error'.

    Implementors should not override this method, but instead implement writable._destroy().

    since

    v8.0.0

    Parameters

    • Optional error: <internal>.Error

      Optional, an error to emit with 'error' event.

    Returns ClientRequest

  • emit(event: "close"): boolean
  • emit(event: "drain"): boolean
  • emit(event: "error", err: <internal>.Error): boolean
  • emit(event: "finish"): boolean
  • emit(event: "pipe", src: <internal>.Readable): boolean
  • emit(event: "unpipe", src: <internal>.Readable): boolean
  • emit(event: string | symbol, ...args: any[]): boolean
  • Synchronously calls each of the listeners registered for the event namedeventName, in the order they were registered, passing the supplied arguments to each.

    Returns true if the event had listeners, false otherwise.

    const EventEmitter = require('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

    Parameters

    • event: "close"

    Returns boolean

  • Parameters

    • event: "drain"

    Returns boolean

  • Parameters

    Returns boolean

  • Parameters

    • event: "finish"

    Returns boolean

  • Parameters

    Returns boolean

  • Parameters

    Returns boolean

  • Parameters

    • event: string | symbol
    • Rest ...args: any[]

    Returns boolean

  • Calling the writable.end() method signals that no more data will be written to the Writable. The optional chunk and encoding arguments allow one final additional chunk of data to be written immediately before closing the stream.

    Calling the write method after calling end will raise an error.

    // Write 'hello, ' and then end with 'world!'.
    const fs = require('fs');
    const file = fs.createWriteStream('example.txt');
    file.write('hello, ');
    file.end('world!');
    // Writing more now is not allowed!
    since

    v0.9.4

    Parameters

    • Optional cb: () => void
        • (): void
        • Returns void

    Returns ClientRequest

  • Parameters

    • chunk: any
    • Optional cb: () => void
        • (): void
        • Returns void

    Returns ClientRequest

  • Parameters

    • chunk: any
    • encoding: BufferEncoding
    • Optional cb: () => void
        • (): void
        • Returns void

    Returns ClientRequest

  • eventNames(): (string | symbol)[]
  • Returns an array listing the events for which the emitter has registered listeners. The values in the array are strings or Symbols.

    const EventEmitter = require('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) ]
    since

    v6.0.0

    Returns (string | symbol)[]

  • flushHeaders(): void
  • Compulsorily flushes the message headers

    For efficiency reason, Node.js normally buffers the message headers until outgoingMessage.end() is called or the first chunk of message data is written. It then tries to pack the headers and data into a single TCP packet.

    It is usually desired (it saves a TCP round-trip), but not when the first data is not sent until possibly much later. outgoingMessage.flushHeaders()bypasses the optimization and kickstarts the request.

    since

    v1.6.0

    Returns void

  • getHeader(name: string): undefined | string | number | string[]
  • Gets the value of HTTP header with the given name. If such a name doesn't exist in message, it will be undefined.

    since

    v0.4.0

    Parameters

    • name: string

      Name of header

    Returns undefined | string | number | string[]

  • getHeaderNames(): string[]
  • Returns an array of names of headers of the outgoing outgoingMessage. All names are lowercase.

    since

    v8.0.0

    Returns string[]

  • Returns a shallow copy of the current outgoing headers. Since a shallow copy is used, array values may be mutated without additional calls to various header-related HTTP module methods. The keys of the returned object are the header names and the values are the respective header values. All header names are lowercase.

    The object returned by the outgoingMessage.getHeaders() method does not prototypically inherit from the JavaScript Object. This means that typical Object methods such as obj.toString(), obj.hasOwnProperty(), and others are not defined and will not work.

    outgoingMessage.setHeader('Foo', 'bar');
    outgoingMessage.setHeader('Set-Cookie', ['foo=bar', 'bar=baz']);

    const headers = outgoingMessage.getHeaders();
    // headers === { foo: 'bar', 'set-cookie': ['foo=bar', 'bar=baz'] }
    since

    v8.0.0

    Returns OutgoingHttpHeaders

  • getMaxListeners(): number
  • Returns the current max listener value for the EventEmitter which is either set by emitter.setMaxListeners(n) or defaults to defaultMaxListeners.

    since

    v1.0.0

    Returns number

  • getRawHeaderNames(): string[]
  • Returns an array containing the unique names of the current outgoing raw headers. Header names are returned with their exact casing being set.

    request.setHeader('Foo', 'bar');
    request.setHeader('Set-Cookie', ['foo=bar', 'bar=baz']);

    const headerNames = request.getRawHeaderNames();
    // headerNames === ['Foo', 'Set-Cookie']
    since

    v15.13.0, v14.17.0

    Returns string[]

  • hasHeader(name: string): boolean
  • Returns true if the header identified by name is currently set in the outgoing headers. The header name is case-insensitive.

    const hasContentType = outgoingMessage.hasHeader('content-type');
    
    since

    v8.0.0

    Parameters

    • name: string

    Returns boolean

  • listenerCount(eventName: string | symbol): number
  • Returns the number of listeners listening to the event named eventName.

    since

    v3.2.0

    Parameters

    • eventName: string | symbol

      The name of the event being listened for

    Returns number

  • listeners(eventName: string | symbol): Function[]
  • 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] ]
    since

    v0.1.26

    Parameters

    • eventName: string | symbol

    Returns Function[]

  • off(eventName: string | symbol, listener: (...args: any[]) => void): ClientRequest
  • Alias for emitter.removeListener().

    since

    v10.0.0

    Parameters

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

          • Rest ...args: any[]

          Returns void

    Returns ClientRequest

  • onSocket(socket: Socket): void
  • Parameters

    Returns void

  • pipe<T>(destination: T, options?: { end?: boolean }): T
  • Type parameters

    Parameters

    • destination: T
    • Optional options: { end?: boolean }
      • Optional end?: boolean

    Returns T

  • rawListeners(eventName: string | symbol): Function[]
  • Returns a copy of the array of listeners for the event named eventName, including any wrappers (such as those created by .once()).

    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');
    since

    v9.4.0

    Parameters

    • eventName: string | symbol

    Returns Function[]

  • 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.

    since

    v0.1.26

    Parameters

    • Optional event: string | symbol

    Returns ClientRequest

  • removeHeader(name: string): void
  • Removes a header that is queued for implicit sending.

    outgoingMessage.removeHeader('Content-Encoding');
    
    since

    v0.4.0

    Parameters

    • name: string

    Returns void

  • Removes the specified listener from the listener array for the event namedeventName.

    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 anyremoveListener() or removeAllListeners() calls after emitting and_before_ the last listener finishes execution will not remove them fromemit() in progress. Subsequent events behave as expected.

    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:

    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.

    Parameters

    • event: "close"
    • listener: () => void
        • (): void
        • Returns void

    Returns ClientRequest

  • Parameters

    • event: "drain"
    • listener: () => void
        • (): void
        • Returns void

    Returns ClientRequest

  • Parameters

    Returns ClientRequest

  • Parameters

    • event: "finish"
    • listener: () => void
        • (): void
        • Returns void

    Returns ClientRequest

  • Parameters

    Returns ClientRequest

  • Parameters

    Returns ClientRequest

  • Parameters

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

          • Rest ...args: any[]

          Returns void

    Returns ClientRequest

  • setHeader(name: string, value: string | number | readonly string[]): ClientRequest
  • Sets a single header value for the header object.

    since

    v0.4.0

    Parameters

    • name: string

      Header name

    • value: string | number | readonly string[]

      Header value

    Returns ClientRequest

  • 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 toInfinity (or 0) to indicate an unlimited number of listeners.

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

    since

    v0.3.5

    Parameters

    • n: number

    Returns ClientRequest

  • setNoDelay(noDelay?: boolean): void
  • Once a socket is assigned to this request and is connected socket.setNoDelay() will be called.

    since

    v0.5.9

    Parameters

    • Optional noDelay: boolean

    Returns void

  • setSocketKeepAlive(enable?: boolean, initialDelay?: number): void
  • Once a socket is assigned to this request and is connected socket.setKeepAlive() will be called.

    since

    v0.5.9

    Parameters

    • Optional enable: boolean
    • Optional initialDelay: number

    Returns void

  • setTimeout(timeout: number, callback?: () => void): ClientRequest
  • Once a socket is assigned to this request and is connected socket.setTimeout() will be called.

    since

    v0.5.9

    Parameters

    • timeout: number

      Milliseconds before a request times out.

    • Optional callback: () => void

      Optional function to be called when a timeout occurs. Same as binding to the 'timeout' event.

        • (): void
        • Returns void

    Returns ClientRequest

  • uncork(): void
  • The writable.uncork() method flushes all data buffered since cork was called.

    When using writable.cork() and writable.uncork() to manage the buffering of writes to a stream, it is recommended that calls to writable.uncork() be deferred using process.nextTick(). Doing so allows batching of allwritable.write() calls that occur within a given Node.js event loop phase.

    stream.cork();
    stream.write('some ');
    stream.write('data ');
    process.nextTick(() => stream.uncork());

    If the writable.cork() method is called multiple times on a stream, the same number of calls to writable.uncork() must be called to flush the buffered data.

    stream.cork();
    stream.write('some ');
    stream.cork();
    stream.write('data ');
    process.nextTick(() => {
    stream.uncork();
    // The data will not be flushed until uncork() is called a second time.
    stream.uncork();
    });

    See also: writable.cork().

    since

    v0.11.2

    Returns void

  • The writable.write() method writes some data to the stream, and calls the supplied callback once the data has been fully handled. If an error occurs, the callback will be called with the error as its first argument. The callback is called asynchronously and before 'error' is emitted.

    The return value is true if the internal buffer is less than thehighWaterMark configured when the stream was created after admitting chunk. If false is returned, further attempts to write data to the stream should stop until the 'drain' event is emitted.

    While a stream is not draining, calls to write() will buffer chunk, and return false. Once all currently buffered chunks are drained (accepted for delivery by the operating system), the 'drain' event will be emitted. It is recommended that once write() returns false, no more chunks be written until the 'drain' event is emitted. While calling write() on a stream that is not draining is allowed, Node.js will buffer all written chunks until maximum memory usage occurs, at which point it will abort unconditionally. Even before it aborts, high memory usage will cause poor garbage collector performance and high RSS (which is not typically released back to the system, even after the memory is no longer required). Since TCP sockets may never drain if the remote peer does not read the data, writing a socket that is not draining may lead to a remotely exploitable vulnerability.

    Writing data while the stream is not draining is particularly problematic for a Transform, because the Transform streams are paused by default until they are piped or a 'data' or 'readable' event handler is added.

    If the data to be written can be generated or fetched on demand, it is recommended to encapsulate the logic into a Readable and use pipe. However, if calling write() is preferred, it is possible to respect backpressure and avoid memory issues using the 'drain' event:

    function write(data, cb) {
    if (!stream.write(data)) {
    stream.once('drain', cb);
    } else {
    process.nextTick(cb);
    }
    }

    // Wait for cb to be called before doing any other write.
    write('hello', () => {
    console.log('Write completed, do more writes now.');
    });

    A Writable stream in object mode will always ignore the encoding argument.

    since

    v0.9.4

    Parameters

    • chunk: any

      Optional data to write. For streams not operating in object mode, chunk must be a string, Buffer or Uint8Array. For object mode streams, chunk may be any JavaScript value other than null.

    • Optional callback: (error: undefined | null | <internal>.Error) => void

      Callback for when this chunk of data is flushed.

    Returns boolean

    false if the stream wishes for the calling code to wait for the 'drain' event to be emitted before continuing to write additional data; otherwise true.

  • Parameters

    Returns boolean

  • 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.

    const { getEventListeners, EventEmitter } = require('events');

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

    v15.2.0, v14.17.0

    Parameters

    Returns Function[]

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

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

    v0.9.12

    deprecated

    Since v3.2.0 - Use listenerCount instead.

    Parameters

    Returns number

  • ```js const { on, EventEmitter } = require('events');

    (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')) { // 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:

    ```js
    const { on, EventEmitter } = require('events');
    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());
    since

    v13.6.0, v12.16.0

    Parameters

    Returns AsyncIterableIterator<any>

    that iterates eventName events emitted by the emitter

  • 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.

    const { once, EventEmitter } = require('events');

    async function run() {
    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.log('error happened', err);
    }
    }

    run();

    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:

    const { EventEmitter, once } = require('events');

    const ee = new EventEmitter();

    once(ee, 'error')
    .then(([err]) => console.log('ok', err.message))
    .catch((err) => console.log('error', err.message));

    ee.emit('error', new Error('boom'));

    // Prints: ok boom

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

    const { EventEmitter, once } = require('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!
    since

    v11.13.0, v10.16.0

    Parameters

    Returns Promise<any[]>

  • Parameters

    Returns Promise<any[]>

  • 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 EventEmitter.setMaxListeners() method allows the default limit to be modified (if eventTargets is empty) or modify the limit specified in every EventTarget | EventEmitter passed as arguments. The value can be set toInfinity (or 0) to indicate an unlimited number of listeners.

    EventEmitter.setMaxListeners(20);
    // Equivalent to
    EventEmitter.defaultMaxListeners = 20;

    const eventTarget = new EventTarget();
    // Only way to increase limit for `EventTarget` instances
    // as these doesn't expose its own `setMaxListeners` method
    EventEmitter.setMaxListeners(20, eventTarget);
    since

    v15.3.0, v14.17.0

    Parameters

    Returns void

Generated using TypeDoc