Skip to main content

What are Event Emitters in Node.js? Provide an example.

 Event Emitters in Node.js

In Node.js, an Event Emitter is a fundamental concept used to handle asynchronous events. It is part of the events module, and it allows an object to emit events and allow listeners to respond to those events.

The EventEmitter class in Node.js provides an interface for creating objects that can emit events and register event listeners (callbacks) for those events.

What are Event Emitters in Node.js? Provide an example.

Key Concepts:

  1. Emit: When something happens (an event occurs), an emitter can emit that event.

  2. Listen: The system listens for events and executes specific code when the event is triggered.

  3. Event Handling: Allows asynchronous handling of events.

How to Use Event Emitters

1. Import the events module

To use event emitters, you first need to import the events module.


const EventEmitter = require('events');

2. Create an instance of EventEmitter

You create an instance of EventEmitter using the new keyword. Then, you can use this instance to emit events and add listeners.


const emitter = new EventEmitter();

3. Add Listeners to Events

You can listen for specific events using the .on() method. When the event is emitted, the corresponding callback function is executed.


emitter.on('greet', (message) => { console.log(message); });
  • .on('event', callback) is used to register an event listener.

  • In the example, we're listening for the greet event and printing the passed message when it's triggered.

4. Emit Events

You can trigger (emit) an event using the .emit() method. This will execute all the functions that are listening for that specific event.

emitter.emit('greet', 'Hello, Event Emitters!');
  • .emit('event', ...) triggers the event, and any listeners that are attached to that event are invoked.

Example: EventEmitter in Action

Here’s a complete example that demonstrates creating a custom event, adding listeners, and emitting the event.

const EventEmitter = require('events'); // Create an instance of EventEmitter const myEmitter = new EventEmitter(); // Add a listener for the 'greet' event myEmitter.on('greet', (message) => { console.log(`Received message: ${message}`); }); // Emit the 'greet' event with a message myEmitter.emit('greet', 'Hello, world!'); // Another listener can also listen to the same event myEmitter.on('greet', (message) => { console.log(`Another listener: ${message}`); }); // Emit the event again myEmitter.emit('greet', 'Node.js is awesome!');

Output:

Received message: Hello, world! Another listener: Hello, world! Received message: Node.js is awesome! Another listener: Node.js is awesome!

Event Handling Flow:

  1. The first listener listens for the greet event and logs the message.

  2. The second listener also listens for the greet event and logs the message again.

  3. When the event is emitted, both listeners are triggered, and the message is logged.

Other Methods Available for EventEmitters

  • .once(eventName, listener): Listens to an event only once and removes the listener after it is triggered.

    myEmitter.once('onceEvent', () => { console.log('This will only run once'); }); myEmitter.emit('onceEvent'); // Logs 'This will only run once' myEmitter.emit('onceEvent'); // Does nothing
  • .removeListener(eventName, listener): Removes a specific listener for an event.


    const greetListener = (message) => { console.log(`Listener removed: ${message}`); }; myEmitter.on('greet', greetListener); myEmitter.removeListener('greet', greetListener); myEmitter.emit('greet', 'This will not be logged');
  • .removeAllListeners([eventName]): Removes all listeners for a particular event or for all events.

    myEmitter.removeAllListeners('greet'); myEmitter.emit('greet', 'No listeners anymore');

When to Use Event Emitters

Event Emitters are ideal for scenarios like:

Popular posts from this blog

Explain the Angular compilation process: View Engine vs. Ivy.

 The Angular compilation process transforms your Angular templates and components into efficient JavaScript code that the browser can execute. Over time, Angular has evolved from the View Engine compiler to a newer, more efficient system called Ivy . Here's a breakdown of the differences between View Engine and Ivy , and how each affects the compilation process: 🔧 1. What Is Angular Compilation? Angular templates ( HTML inside components) are not regular HTML—they include Angular-specific syntax like *ngIf , {{ }} interpolation, and custom directives. The compiler translates these templates into JavaScript instructions that render and update the DOM. Angular uses Ahead-of-Time (AOT) or Just-in-Time (JIT) compilation modes: JIT : Compiles in the browser at runtime (used in development). AOT : Compiles at build time into efficient JS (used in production). 🧱 2. View Engine (Legacy Compiler) ➤ Used in Angular versions < 9 🔍 How It Works: Compiles templat...

Explain the concept of ControlValueAccessor in custom form components.

 In Angular, the ControlValueAccessor interface is what allows custom form components to work seamlessly with Angular forms (both reactive and template-driven). 🧠 What is ControlValueAccessor ? It’s an Angular bridge between your custom component and the Angular Forms API . When you use a custom form component (like a date picker, dropdown, slider, etc.), Angular doesn't automatically know how to read or write its value. That’s where ControlValueAccessor comes in. It tells Angular: How to write a value to the component How to notify Angular when the component’s value changes How to handle disabled state 📦 Common Built-in Examples: <input> and <select> already implement ControlValueAccessor You implement it when creating custom form controls 🔧 Key Methods in the Interface Method Purpose writeValue(obj: any) Called by Angular to set the value in the component registerOnChange(fn: any) Passes a function to call when the component value ch...

What are the different types of directives in Angular? Give real-world examples.

In Angular, directives are classes that allow you to manipulate the DOM or component behavior . There are three main types of directives: 🧱 1. Component Directives Technically, components are directives with a template. They control a section of the screen (UI) and encapsulate logi c. ✅ Example: @Component ({ selector : 'app-user-card' , template : `<h2>{{ name }}</h2>` }) export class UserCardComponent { name = 'Alice' ; } 📌 Real-World Use: A ProductCardComponent showing product details on an e-commerce site. A ChatMessageComponent displaying individual messages in a chat app. ⚙️ 2. Structural Directives These change the DOM layout by adding or removing elements. ✅ Built-in Examples: *ngIf : Conditionally includes a template. *ngFor : Iterates over a list and renders template for each item. *ngSwitch : Switches views based on a condition. 📌 Real-World Use: < div * ngIf = "user.isLoggedIn...