Sunday, 15 September 2024

Event Module in Node.js

Key Concepts:

  • EventEmitter: This class is the core of the events module, allowing you to create, listen for, and trigger events.
  • emit(): Emits an event, triggering all the listeners attached to that event.
  • on(): Attaches a listener function to a specific event.

Usage of the Event Module

Here’s a basic example demonstrating how to use the events module:

  1. Import the EventEmitter class:

    const EventEmitter = require('events');
  2. Create an instance of EventEmitter:

    const eventEmitter = new EventEmitter();
  3. Register an event listener using on():

    eventEmitter.on('greet', () => { console.log('Hello, world!'); });
  4. Trigger an event using emit():

    eventEmitter.emit('greet'); // Outputs: Hello, world!

Example: Passing Data with Events

You can also pass data when emitting an event:

const EventEmitter = require('events'); const eventEmitter = new EventEmitter(); // Register listener with arguments eventEmitter.on('greet', (name) => { console.log(`Hello, ${name}!`); }); // Emit the event with a parameter eventEmitter.emit('greet', 'John'); // Outputs: Hello, John!

Removing Event Listeners

You can remove event listeners using removeListener() or removeAllListeners():

const greet = () => { console.log('Hello, world!'); }; eventEmitter.on('greet', greet); // Remove the listener eventEmitter.removeListener('greet', greet);

EventEmitter Methods:

  • on(event, listener): Attaches a listener for the specified event.
  • emit(event, [arg1], [arg2], [...]): Emits the specified event, calling all attached listeners.
  • once(event, listener): Attaches a listener that is called at most once.
  • removeListener(event, listener): Removes the specified listener.
  • removeAllListeners([event]): Removes all listeners for the event.
  • listeners(event): Returns an array of listeners for the event.

Example: Using once()

The once() method attaches a listener that is called only once:

eventEmitter.once('greetOnce', () => { console.log('This will only be logged once'); }); eventEmitter.emit('greetOnce'); // Outputs: This will only be logged once eventEmitter.emit('greetOnce'); // No output

Inheriting from EventEmitter

In Node.js, it's common to extend the EventEmitter class to make custom classes emit events:

const EventEmitter = require('events'); class MyEmitter extends EventEmitter {} const myEmitter = new MyEmitter(); // Register event listener myEmitter.on('event', () => { console.log('An event occurred!'); }); // Emit the event myEmitter.emit('event'); // Outputs: An event occurred!

Real-World Usage

The events module is widely used in Node.js for handling things like:

  • Streams: Both readable and writable streams are event emitters.
  • HTTP Requests: The request and response objects in HTTP are also event emitters.
  • Timers: You can listen to setTimeout, setInterval, etc., via events.
Thank you

No comments:

Post a Comment

Golang Advanced Interview Q&A