Custom event emitter classes let you create your own events and respond to them. This helps different parts of your program talk to each other easily.
0
0
Custom event emitter classes in Node.js
Introduction
You want to run some code when something happens, like a file finishes loading.
You need to notify many parts of your app about a change, like a user logging in.
You want to organize your code so events trigger actions without tight connections.
You are building a chat app and want to handle new messages as events.
You want to react to timers or external signals in a clean way.
Syntax
Node.js
const EventEmitter = require('events'); class MyEmitter extends EventEmitter { // custom methods or properties can go here } const emitter = new MyEmitter(); emitter.on('eventName', () => { console.log('Event happened!'); }); emitter.emit('eventName');
Use on to listen for an event.
Use emit to trigger the event and run all listeners.
Examples
This example listens for a 'greet' event and prints 'Hello!' when it happens.
Node.js
const EventEmitter = require('events'); class MyEmitter extends EventEmitter {} const emitter = new MyEmitter(); emitter.on('greet', () => { console.log('Hello!'); }); emitter.emit('greet');
This example shows how to pass data with the event. The listener gets the message and prints it.
Node.js
const EventEmitter = require('events'); class MyEmitter extends EventEmitter {} const emitter = new MyEmitter(); emitter.on('data', (msg) => { console.log('Received:', msg); }); emitter.emit('data', 'This is a message');
This example adds a custom method to emit an event, making the code cleaner.
Node.js
const EventEmitter = require('events'); class MyEmitter extends EventEmitter { sendMessage(msg) { this.emit('message', msg); } } const emitter = new MyEmitter(); emitter.on('message', (msg) => { console.log('Message:', msg); }); emitter.sendMessage('Hi there!');
Sample Program
This program creates a TaskRunner class that emits 'start' and 'finish' events when running a task. Listeners print messages when these events happen. It simulates a task with a 1-second delay.
Node.js
const EventEmitter = require('events'); class TaskRunner extends EventEmitter { run(taskName) { console.log(`Starting task: ${taskName}`); this.emit('start', taskName); // Simulate task work with a timeout setTimeout(() => { this.emit('finish', taskName); console.log(`Finished task: ${taskName}`); }, 1000); } } const runner = new TaskRunner(); runner.on('start', (name) => { console.log(`Event: Task '${name}' has started.`); }); runner.on('finish', (name) => { console.log(`Event: Task '${name}' has finished.`); }); runner.run('CleanUp');
OutputSuccess
Important Notes
Always remove listeners if they are no longer needed to avoid memory leaks.
Use once if you want a listener to run only one time.
Event names are case-sensitive strings.
Summary
Custom event emitter classes help your code parts communicate by sending and listening to events.
You create a class extending EventEmitter, then use on and emit to handle events.
This pattern keeps your code organized and easy to extend.