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.
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 =newEventEmitter();// First listenermyEmitter.on('event', functionfirstListener() { console.log('Helloooo! first listener');});// Second listenermyEmitter.on('event', functionsecondListener(arg1, arg2) { console.log(`event with parameters ${arg1}, ${arg2} in second listener`);});// Third listenermyEmitter.on('event', functionthirdListener(...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
Adds a one-timelistener 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. Theemitter.prependOnceListener() method can be used as an alternative to add the
event listener to the beginning of the listeners array.
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 eventNameand listener will result in the listener being added, and called, multiple
times.
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.
Returns a copy of the array of listeners for the event named eventName,
including any wrappers (such as those created by .once()).
const emitter =newEventEmitter();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 aboveconst listeners = emitter.rawListeners('log');const logFnWrapper = listeners[0];// Logs "log once" to the console and does not unbind the `once` eventlogFnWrapper.listener();// Logs "log once" to the console and removes the listenerlogFnWrapper();emitter.on('log', () => console.log('log persistently'));// Will return a new Array with a single function bound by `.on()` aboveconst newListeners = emitter.rawListeners('log');// Logs "log persistently" twicenewListeners[0]();emitter.emit('log');
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.
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 =newMyEmitter();constcallbackA= () => { console.log('A'); myEmitter.removeListener('event', callbackB);};constcallbackB= () => { 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 =newEventEmitter();functionpong() { 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.
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.
const { on, EventEmitter } =require('events');(async () => {const ee =newEventEmitter();// Emit later on process.nextTick(() => { ee.emit('foo', 'bar'); ee.emit('foo', 42); });forawait (const event ofon(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:
const { on, EventEmitter } =require('events');const ac =newAbortController();(async () => {const ee =newEventEmitter();// Emit later on process.nextTick(() => { ee.emit('foo', 'bar'); ee.emit('foo', 42); });forawait (const event ofon(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());
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 Icon Link interface, which has no special'error' event
semantics and does not listen to the 'error' event.
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 =newEventEmitter();once(ee, 'error') .then(([err]) => console.log('ok', err.message)) .catch((err) => console.log('error', err.message));ee.emit('error', newError('boom'));// Prints: ok boom
An AbortSignal can be used to cancel waiting for the event:
const { EventEmitter, once } =require('events');const ee =newEventEmitter();const ac =newAbortController();asyncfunctionfoo(emitter, event, signal) {try {awaitonce(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 eventee.emit('foo'); // Prints: Waiting for the event was canceled!