Core Modules
Node.js events EventEmitter
EventEmitter implements the publish-subscribe pattern: an object emits named events and any number of listeners react. Streams, HTTP servers and many libraries are built on it.
What is events EventEmitter in Node.js?
EventEmitter implements the publish-subscribe pattern: an object emits named events and any number of listeners react. Streams, HTTP servers and many libraries are built on it.
events EventEmitter example
import { EventEmitter } from 'node:events';
class JobQueue extends EventEmitter {
add(job) {
this.emit('added', job);
setTimeout(() => this.emit('done', job), 1000);
}
}
const queue = new JobQueue();
queue.on('added', job => console.log('queued', job.id));
queue.once('done', job => console.log('finished', job.id)); // fires once
queue.on('error', err => console.error(err)); // essential
queue.add({ id: 'a1' });How this works
An "error" event with no listener is a special case: Node throws it and the process exits. Always attach an error listener to any emitter you create or consume.
Key points to remember
- on adds a listener, once adds a one-shot listener, off removes one.
- Listeners run synchronously in the order they were registered.
- The default warning at eleven listeners usually indicates a leak.
Common mistakes with events EventEmitter
- No "error" listener, which crashes the process.
- Adding a listener inside a loop or request handler without removing it.
Node.js events EventEmitter— Interview Questions & FAQs
Why does Node warn about a possible EventEmitter memory leak?+
More than ten listeners were added for the same event, usually because listeners are registered repeatedly without being removed. Remove them with off, or raise the limit deliberately with setMaxListeners.
