EventEmitter

Back

Loading concept...

๐Ÿ“ก EventEmitter: The Magical Messenger of Node.js


๐ŸŽญ The Story Begins: Imagine a Classroom Bell

Imagine youโ€™re in a classroom. When the bell rings, everyone hears it and does something:

  • Kids pack their bags ๐ŸŽ’
  • Teacher closes the book ๐Ÿ“š
  • The clock keeper notes the time โฐ

The bell doesnโ€™t care WHO is listening. It just rings. Anyone who wants to react, reacts.

Thatโ€™s exactly how EventEmitter works in Node.js!


๐ŸŒŸ What is EventEmitter?

EventEmitter is like a magical announcement system. It lets one part of your code shout out (emit events), and other parts can listen and respond.

Real-Life Examples:

  • ๐Ÿ“ฑ Phone notification โ†’ You check your phone
  • ๐Ÿšช Doorbell rings โ†’ You open the door
  • ๐ŸŽฎ Game: โ€œPlayer jumped!โ€ โ†’ Play jump sound

In Code Terms:

// Someone shouts: "Pizza is here!"
// Everyone listening reacts!

๐Ÿ”ง Creating Event Emitters

Creating an EventEmitter is like building your own doorbell system.

Step 1: Import the Tool

// Get the EventEmitter class
const EventEmitter = require('events');

Step 2: Create Your Emitter

// Create a new announcement system
const myEmitter = new EventEmitter();

Making It Your Own (Custom Class):

const EventEmitter = require('events');

class Doorbell extends EventEmitter {
  ring() {
    console.log('๐Ÿ”” Ding dong!');
    this.emit('ring');
  }
}

const doorbell = new Doorbell();

Think of it like this:

graph TD A["EventEmitter Class"] --> B["Your Custom Emitter"] B --> C["Can emit events"] B --> D["Can listen to events"]

๐Ÿ“ข Event Emission: Shouting Out Loud!

Emitting = Announcing something happened.

The .emit() Method

const EventEmitter = require('events');
const speaker = new EventEmitter();

// SHOUT IT OUT!
speaker.emit('greeting', 'Hello!');

Sending Data with Events:

// You can send information along!
speaker.emit('order', {
  item: 'Pizza',
  size: 'Large'
});

Think of .emit() like:

  • ๐Ÿ“ฃ A megaphone announcement
  • ๐Ÿ“ฌ Sending a letter to everyone subscribed
  • ๐ŸŽ‰ Throwing confetti and yelling โ€œPARTY!โ€

๐Ÿ‘‚ Event Listening: Paying Attention

Listening = Waiting for announcements and reacting.

The .on() Method

const EventEmitter = require('events');
const bell = new EventEmitter();

// I'm listening for the 'ring' event!
bell.on('ring', () => {
  console.log('Someone is at the door!');
});

// Ring the bell
bell.emit('ring');
// Output: Someone is at the door!

Receiving Data from Events:

const EventEmitter = require('events');
const pizza = new EventEmitter();

pizza.on('delivered', (order) => {
  console.log(`Got my ${order.size} pizza!`);
});

pizza.emit('delivered', { size: 'Large' });
// Output: Got my Large pizza!

One-Time Listener (.once()):

Sometimes you only want to react once:

const EventEmitter = require('events');
const alarm = new EventEmitter();

// Only react the FIRST time
alarm.once('beep', () => {
  console.log('Wake up! (only once)');
});

alarm.emit('beep'); // Wake up!
alarm.emit('beep'); // Nothing happens
graph TD A["emit 'beep'"] --> B{Listener exists?} B -->|Yes| C["Run callback"] B -->|No| D["Nothing happens"] C --> E{.once listener?} E -->|Yes| F["Remove listener"] E -->|No| G["Keep listening"]

๐Ÿ”„ Multiple Listeners

One event can have many listeners!

const EventEmitter = require('events');
const party = new EventEmitter();

// Listener 1
party.on('start', () => {
  console.log('๐ŸŽต Music plays!');
});

// Listener 2
party.on('start', () => {
  console.log('๐Ÿ’ก Lights flash!');
});

// Listener 3
party.on('start', () => {
  console.log('๐ŸŽˆ Balloons drop!');
});

party.emit('start');
// Output:
// ๐ŸŽต Music plays!
// ๐Ÿ’ก Lights flash!
// ๐ŸŽˆ Balloons drop!

โš ๏ธ Error Event Handling: When Things Go Wrong

The โ€˜errorโ€™ event is SPECIAL in Node.js!

The Golden Rule:

If you emit an โ€˜errorโ€™ event and no one is listening, Node.js crashes your entire program! ๐Ÿ’ฅ

Always Handle Errors:

const EventEmitter = require('events');
const risky = new EventEmitter();

// ALWAYS add an error listener!
risky.on('error', (err) => {
  console.log('Oops!', err.message);
});

// Now it's safe to emit errors
risky.emit('error', new Error('Something broke'));
// Output: Oops! Something broke

What Happens WITHOUT Error Handling:

const EventEmitter = require('events');
const danger = new EventEmitter();

// NO error listener = ๐Ÿ’ฅ CRASH!
danger.emit('error', new Error('Boom!'));
// Your program dies here
graph TD A["emit 'error'"] --> B{Error listener?} B -->|Yes| C["Handle gracefully"] B -->|No| D["๐Ÿ’ฅ Program CRASHES!"]

Best Practice Pattern:

const EventEmitter = require('events');

class SafeEmitter extends EventEmitter {
  constructor() {
    super();
    // Always have a safety net!
    this.on('error', (err) => {
      console.error('Error caught:', err);
    });
  }
}

๐Ÿ› ๏ธ Useful Methods Cheat Sheet

Method What It Does
.on(event, fn) Listen forever
.once(event, fn) Listen once
.emit(event, data) Announce event
.off(event, fn) Stop listening
.removeAllListeners() Remove all
.listenerCount(event) Count listeners

๐ŸŽฎ Complete Working Example

const EventEmitter = require('events');

// Create a game event system
const game = new EventEmitter();

// Set up listeners
game.on('playerJoined', (name) => {
  console.log(`๐ŸŽฎ ${name} joined!`);
});

game.on('scored', (points) => {
  console.log(`โญ +${points} points!`);
});

game.on('error', (err) => {
  console.log(`โŒ Error: ${err.message}`);
});

// Play the game!
game.emit('playerJoined', 'Alex');
game.emit('scored', 100);
game.emit('scored', 50);
game.emit('playerJoined', 'Sam');

Output:

๐ŸŽฎ Alex joined!
โญ +100 points!
โญ +50 points!
๐ŸŽฎ Sam joined!

๐Ÿง  Key Takeaways

  1. EventEmitter = Announcement system
  2. .emit() = Shout out an event
  3. .on() = Listen and react
  4. .once() = Listen only one time
  5. โ€˜errorโ€™ event = ALWAYS handle it!

๐ŸŒˆ Remember This Analogy

Real World EventEmitter
Bell rings .emit('ring')
Kids listen .on('ring', ...)
React once .once('ring', ...)
Fire alarm! .emit('error')

Youโ€™re now ready to build amazing event-driven apps! ๐Ÿš€

Loading story...

Story - Premium Content

Please sign in to view this story and start learning.

Upgrade to Premium to unlock full access to all stories.

Stay Tuned!

Story is coming soon.

Story Preview

Story - Premium Content

Please sign in to view this concept and start learning.

Upgrade to Premium to unlock full access to all content.