Stream
The EventEmitter
class is defined and exposed by the node:events
module:
All EventEmitter
s emit the event 'newListener'
when new listeners are
added and 'removeListener'
when existing listeners are removed.
It supports the following option:
Since
v0.1.26
Properties
Symbol.for('nodejs.rejection')
See how to write a custom rejection handler
.captureRejections
booleanRequireddefaultMaxListeners
numberRequired10
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 _all_EventEmitter
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 singleEventEmitter
, the emitter.getMaxListeners()
and emitter.setMaxListeners()
methods can be used to temporarily avoid this warning: js 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'
.'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
[captureRejectionSymbol]
Parameters
Returns
void
voidaddListener
Alias for emitter.on(eventName, listener)
.
Parameters
eventName
string | symbolRequiredlistener
(...args: any[]) => voidRequiredReturns
Since
v0.1.26
compose
Parameters
options
objectoptions.signal
AbortSignalRequiredReturns
T
TRequiredemit
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.
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
Parameters
eventName
string | symbolRequiredargs
any[]RequiredReturns
boolean
booleanSince
v0.1.26
eventNames
Returns an array listing the events for which the emitter has registered
listeners. The values in the array are strings or Symbol
s.
Returns
(string \| symbol)[]
(string | symbol)[]RequiredSince
v6.0.0
getMaxListeners
Returns the current max listener value for the EventEmitter
which is either
set by emitter.setMaxListeners(n)
or defaults to defaultMaxListeners.
Returns
number
numberSince
v1.0.0
listenerCount
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.
Parameters
eventName
string | symbolRequiredlistener
FunctionReturns
number
numberSince
v3.2.0
listeners
Returns a copy of the array of listeners for the event named eventName
.
Parameters
eventName
string | symbolRequiredReturns
Function[]
Function[]RequiredSince
v0.1.26
off
Alias for emitter.removeListener()
.
Parameters
eventName
string | symbolRequiredlistener
(...args: any[]) => voidRequiredReturns
Since
v10.0.0
on
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.
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.prependListener()
method can be used as an alternative to add the
event listener to the beginning of the listeners array.
Parameters
eventName
string | symbolRequiredlistener
(...args: any[]) => voidRequiredReturns
Since
v0.1.101
once
Adds a one-timelistener
function for the event named eventName
. The
next time eventName
is triggered, this listener is removed and then invoked.
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.
Parameters
eventName
string | symbolRequiredlistener
(...args: any[]) => voidRequiredReturns
Since
v0.3.0
pipe
Parameters
destination
TRequiredoptions
objectoptions.end
booleanReturns
T
TRequiredprependListener
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.
Returns a reference to the EventEmitter
, so that calls can be chained.
Parameters
eventName
string | symbolRequiredlistener
(...args: any[]) => voidRequiredReturns
Since
v6.0.0
prependOnceListener
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.
Returns a reference to the EventEmitter
, so that calls can be chained.
Parameters
eventName
string | symbolRequiredlistener
(...args: any[]) => voidRequiredReturns
Since
v6.0.0
rawListeners
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');
Parameters
eventName
string | symbolRequired