Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is a custom event emitter class in Node.js?
A custom event emitter class is a user-defined class that extends Node.js's built-in EventEmitter to create and manage custom events, allowing different parts of an app to communicate by emitting and listening to events.
Click to reveal answer
beginner
How do you create a custom event emitter class in Node.js?
You create a custom event emitter class by importing { EventEmitter } from the 'events' module and extending it with your class. Then you can add methods that emit events using this.emit('eventName').
Click to reveal answer
intermediate
Why use custom event emitter classes instead of plain callbacks?
Custom event emitters allow multiple listeners for the same event, better organization of event logic, and decoupling of code parts. Callbacks are limited to single responses and can get messy with many events.
Click to reveal answer
beginner
What method do you use to listen for an event in a custom event emitter class?
You use the .on('eventName', callback) method to listen for an event. The callback runs whenever the event is emitted.
Click to reveal answer
intermediate
How can you remove an event listener from a custom event emitter?
You can remove a listener using the .off('eventName', callback) method or .removeListener('eventName', callback). This stops the callback from running when the event fires.
Click to reveal answer
Which Node.js module do you extend to create a custom event emitter class?
Ahttp
Bevents
Cfs
Dstream
✗ Incorrect
The 'events' module provides the EventEmitter class, which you extend to create custom event emitters.
What method do you call to emit an event in a custom event emitter?
Aemit()
Bon()
Clisten()
Dtrigger()
✗ Incorrect
The emit() method triggers an event and calls all listeners attached to that event.
How do you add a listener for an event named 'data'?
Aon('data', callback)
Bemit('data', callback)
Clisten('data', callback)
DaddListener('callback', 'data')
✗ Incorrect
The on() method attaches a callback function to the 'data' event.
What happens if multiple listeners are attached to the same event?
AOnly the last listener runs
BOnly the first listener runs
CAll listeners run in the order they were added
DListeners run randomly
✗ Incorrect
All listeners for an event run in the order they were added when the event is emitted.
Which method removes a specific listener from an event?
AaddListener()
Bemit()
Con()
Doff()
✗ Incorrect
The off() method removes a specific listener callback from an event.
Explain how to create and use a custom event emitter class in Node.js.
Think about how classes and events work together.
You got /5 concepts.
Describe the benefits of using custom event emitter classes over simple callbacks.
Consider how events help different parts of an app talk to each other.
You got /4 concepts.
Practice
(1/5)
1. What is the main purpose of creating a custom event emitter class in Node.js?
easy
A. To replace the need for functions and callbacks
B. To allow different parts of your program to communicate by sending and listening to events
C. To speed up the execution of synchronous code
D. To automatically handle HTTP requests
Solution
Step 1: Understand event emitters
Event emitters let parts of a program send signals (events) and others listen and react to them.
Step 2: Purpose of custom event emitter classes
Custom classes extend EventEmitter to organize and manage these events clearly.
Final Answer:
To allow different parts of your program to communicate by sending and listening to events -> Option B
Quick Check:
Event communication = C [OK]
Hint: Event emitters enable communication between code parts [OK]
Common Mistakes:
Thinking event emitters speed up synchronous code
Confusing event emitters with HTTP handling
Believing event emitters replace all functions
2. Which of the following is the correct way to listen for an event named data in a custom event emitter instance myEmitter?
easy
A. myEmitter.on('data', callback)
B. myEmitter.emit('data', callback)
C. myEmitter.listen('data', callback)
D. myEmitter.trigger('data', callback)
Solution
Step 1: Identify the method to listen for events
The on method is used to register a callback for an event.
Step 2: Check other options
emit triggers events, listen and trigger are not valid EventEmitter methods.
Final Answer:
myEmitter.on('data', callback) -> Option A
Quick Check:
Listen with on() = A [OK]
Hint: Use on() to listen, emit() to send events [OK]
Common Mistakes:
Using emit() to listen instead of on()
Using non-existent methods like listen() or trigger()
Confusing event names with method names
3. Consider this code snippet:
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const emitter = new MyEmitter();
emitter.on('greet', name => console.log(`Hello, ${name}!`));
emitter.emit('greet', 'Alice');
What will be printed when this code runs?
medium
A. greet Alice
B. Error: greet event not found
C. Hello, Alice!
D. undefined
Solution
Step 1: Understand event registration
The on method registers a listener for 'greet' that prints a greeting with the name.
Step 2: Understand event emission
The emit method triggers 'greet' with argument 'Alice', so the listener runs and prints the message.
Final Answer:
Hello, Alice! -> Option C
Quick Check:
Emit triggers listener output = B [OK]
Hint: emit() runs on() listeners with given arguments [OK]
Common Mistakes:
Expecting event name or arguments to print directly
Confusing emit() with on()
Assuming error if no listener exists
4. What is wrong with this custom event emitter code?
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const emitter = new MyEmitter();
emitter.emit('start');
emitter.on('start', () => console.log('Started'));
medium
A. The event name 'start' is invalid
B. emit() cannot be called without arguments
C. You must call super() in the constructor of MyEmitter
D. The event listener is registered after the event is emitted, so it won't run
Solution
Step 1: Check event listener registration timing
The listener for 'start' is added after the event is emitted, so it misses the event.
Step 2: Validate other options
emit() can be called without arguments, super() is optional if no constructor, and 'start' is a valid event name.
Final Answer:
The event listener is registered after the event is emitted, so it won't run -> Option D
Quick Check:
Listener after emit = no output = D [OK]
Hint: Register listeners before emitting events [OK]
Common Mistakes:
Calling emit() before on() listener
Thinking emit() needs arguments always
Assuming constructor must call super() if none defined
5. You want to create a custom event emitter class that counts how many times an event named ping is emitted. Which code correctly implements this behavior?
hard
A. class PingCounter extends EventEmitter {
constructor() {
super();
this.count = 0;
this.on('ping', () => this.count++);
}
}
B. class PingCounter extends EventEmitter {
constructor() {
this.count = 0;
this.on('ping', () => this.count++);
super();
}
}
C. class PingCounter extends EventEmitter {
count = 0;
on('ping', () => this.count++);
}
D. class PingCounter extends EventEmitter {
constructor() {
super();
this.count = 0;
this.emit('ping', () => this.count++);
}
}
Solution
Step 1: Proper constructor and super() call
class PingCounter extends EventEmitter {
constructor() {
super();
this.count = 0;
this.on('ping', () => this.count++);
}
} correctly calls super() first in constructor, required before using this.
Step 2: Correct event listener setup
class PingCounter extends EventEmitter {
constructor() {
super();
this.count = 0;
this.on('ping', () => this.count++);
}
} uses this.on('ping', () => this.count++) to increment count on each ping event.
Step 3: Check other options for errors
class PingCounter extends EventEmitter {
constructor() {
this.count = 0;
this.on('ping', () => this.count++);
super();
}
} calls this.on before super(), causing error. class PingCounter extends EventEmitter {
count = 0;
on('ping', () => this.count++);
} has invalid syntax outside constructor. class PingCounter extends EventEmitter {
constructor() {
super();
this.count = 0;
this.emit('ping', () => this.count++);
}
} wrongly uses emit instead of on.
Final Answer:
class PingCounter extends EventEmitter {
constructor() {
super();
this.count = 0;
this.on('ping', () => this.count++);
}
} -> Option A
Quick Check:
super() first, then on() listener = A [OK]
Hint: Always call super() before using this in constructor [OK]