← Back to Node.js Course | Chapter 4: Async Programming | Lesson 5 of 7

EventEmitter

EventEmitter powers Node's event-driven style: things emit named events and others listen.

In this page:

  1. EventEmitter
Syntax
javascript
const EventEmitter = require('events');

class ClassName extends EventEmitter {
  method() {
    this.emit('eventName', value);
  }
}

const obj = new ClassName();
obj.on('eventName', (value) => {
  // handle event
});

EventEmitter

Extend EventEmitter to make your own event-producing classes. Listeners run synchronously in the order added. Use once for one-time events and remove listeners to avoid leaks. The events.once helper returns a promise for the next event.

Note: Extending EventEmitter lets your class expose events like data or done.

Example: EventEmitter

javascript
const EventEmitter = require("events");
class Downloader extends EventEmitter {
  start() {
    this.emit("start");
    setTimeout(() => this.emit("done", { bytes: 1024 }), 5);
  }
}
const d = new Downloader();
d.on("start", () => console.log("started"));
d.on("done", (info) => console.log("done, bytes:", info.bytes));
d.start();

// Output:
// started
// done, bytes: 1024

⚠️ Run this in your own terminal or Node.js environment.

Related Topics
Common Mistakes
  1. Forgetting to call super() in the constructor
  2. Adding a listener on every request
  3. Emitting before listeners are attached
Chapter Summary
  • Extend EventEmitter for custom events
  • Listeners run synchronously
  • once and off manage listeners
  • events.once returns a promise
🔒

Chapter Quiz — Complete all 7 topics to unlock

0/7 topics done

Complete these topics first:

Login to run this code

C/C++/Java/PHP execution requires a free account. Your code is saved — you'll land right back in the editor after logging in.