Bird
Raised Fist0
Node.jsframework~20 mins

EventEmitter class in Node.js - Practice Problems & Coding Challenges

Choose your learning style10 modes available

Start learning this pattern below

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
Challenge - 5 Problems
🎖️
EventEmitter Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
component_behavior
intermediate
2:00remaining
What is the output of this EventEmitter code?
Consider this Node.js code using EventEmitter. What will it print when run?
Node.js
const EventEmitter = require('events');
const emitter = new EventEmitter();
emitter.on('greet', () => {
  console.log('Hello!');
});
emitter.emit('greet');
emitter.emit('greet');
AHello!
BHello!\nHello!
CNo output
DError: Event not found
Attempts:
2 left
💡 Hint
Think about how many times the 'greet' event is emitted and how many listeners are attached.
state_output
intermediate
2:00remaining
What is the value of count after this EventEmitter code runs?
Look at this code snippet. What is the final value of the variable count?
Node.js
const EventEmitter = require('events');
const emitter = new EventEmitter();
let count = 0;
emitter.on('increment', () => {
  count += 1;
});
emitter.emit('increment');
emitter.emit('increment');
emitter.emit('increment');
A0
B1
C3
DError: count is not defined
Attempts:
2 left
💡 Hint
Each 'increment' event increases count by 1.
📝 Syntax
advanced
2:00remaining
Which option causes a syntax error in EventEmitter usage?
Which of these code snippets will cause a syntax error when using EventEmitter?
Aemitter.on 'event', () => console.log('Hi')
Bemitter.emit('event')
Cemitter.on('event', () => console.log('Hi'))
Demitter.once('event', () => console.log('Hi'))
Attempts:
2 left
💡 Hint
Check the syntax for calling methods in JavaScript.
🔧 Debug
advanced
2:00remaining
Why does this EventEmitter code not print anything?
This code does not print anything. What is the reason?
Node.js
const EventEmitter = require('events');
const emitter = new EventEmitter();
emitter.emit('start');
emitter.on('start', () => {
  console.log('Started');
});
AThe listener is added after the event is emitted, so it misses the event.
BThe event name 'start' is invalid and ignored.
Cemit() does not trigger listeners in EventEmitter.
Dconsole.log is disabled by default in EventEmitter.
Attempts:
2 left
💡 Hint
Think about the order of adding listeners and emitting events.
🧠 Conceptual
expert
2:00remaining
What happens if an EventEmitter listener throws an error and there is no 'error' listener?
In Node.js EventEmitter, if a listener throws an error and no 'error' event listener is registered, what happens?
AThe EventEmitter automatically retries the listener.
BThe error is silently ignored and the program continues.
CThe error is logged to console but the program continues.
DThe process crashes with an uncaught exception.
Attempts:
2 left
💡 Hint
Consider Node.js default behavior for unhandled errors in EventEmitter.

Practice

(1/5)
1. What is the main purpose of the EventEmitter class in Node.js?
easy
A. To manage file system operations
B. To handle HTTP requests and responses
C. To allow parts of a program to send and listen for events
D. To create and manage database connections

Solution

  1. Step 1: Understand the role of EventEmitter

    The EventEmitter class is designed to let different parts of a program communicate by sending and listening for events.
  2. Step 2: Compare with other options

    Options B, C, and D relate to other Node.js modules like HTTP, FS, and database modules, not EventEmitter.
  3. Final Answer:

    To allow parts of a program to send and listen for events -> Option C
  4. Quick Check:

    EventEmitter = event communication [OK]
Hint: EventEmitter is about events, not HTTP or files [OK]
Common Mistakes:
  • Confusing EventEmitter with HTTP or file system modules
  • Thinking EventEmitter manages databases
  • Assuming EventEmitter runs code synchronously
2. Which of the following is the correct way to listen for an event named data using an EventEmitter instance called emitter?
easy
A. emitter.on('data', callback)
B. emitter.listen('data', callback)
C. emitter.emit('data', callback)
D. emitter.addEvent('data', callback)

Solution

  1. Step 1: Identify the method to listen for events

    The on method is used to register a callback to listen for a named event.
  2. Step 2: Check other methods

    emit sends events, not listens. listen and addEvent are not valid EventEmitter methods.
  3. Final Answer:

    emitter.on('data', callback) -> Option A
  4. Quick Check:

    Listen with on() = emitter.on('data', callback) [OK]
Hint: Use on() to listen, emit() to send events [OK]
Common Mistakes:
  • Using emit() to listen instead of send
  • Using non-existent methods like listen()
  • Confusing method names for event handling
3. What will be the output of the following code?
const EventEmitter = require('events');
const emitter = new EventEmitter();
emitter.on('greet', name => {
  console.log(`Hello, ${name}!`);
});
emitter.emit('greet', 'Alice');
medium
A. greet Alice
B. No output
C. Error: greet event not found
D. Hello, Alice!

Solution

  1. Step 1: Understand event registration

    The code registers a listener for the 'greet' event that prints a greeting with the given name.
  2. Step 2: Understand event emission

    When emit('greet', 'Alice') runs, it calls the listener with 'Alice', printing "Hello, Alice!".
  3. Final Answer:

    Hello, Alice! -> Option D
  4. Quick Check:

    emit triggers on() callback [OK]
Hint: emit calls on() listeners with arguments [OK]
Common Mistakes:
  • Expecting no output if event name is wrong
  • Confusing emit with on
  • Thinking emit returns a value
4. Identify the error in this code snippet:
const EventEmitter = require('events');
const emitter = new EventEmitter();
emitter.emit('start');
emitter.on('start', () => {
  console.log('Started');
});
medium
A. The event name 'start' is invalid
B. The event listener is registered after emitting the event
C. emit() requires a callback function as second argument
D. The EventEmitter class is not imported correctly

Solution

  1. Step 1: Check event listener registration timing

    The listener for 'start' is added after the event is emitted, so it misses the event.
  2. Step 2: Verify other options

    EventEmitter is imported correctly, emit() does not require a callback, and 'start' is a valid event name.
  3. Final Answer:

    The event listener is registered after emitting the event -> Option B
  4. Quick Check:

    Listeners must be added before emit() [OK]
Hint: Add listeners before emitting events [OK]
Common Mistakes:
  • Emitting before listener registration
  • Thinking emit needs a callback argument
  • Assuming event names have restrictions
5. You want to create an EventEmitter that counts how many times an event ping is emitted and logs the count each time. Which code correctly implements this?
hard
A. const EventEmitter = require('events'); const emitter = new EventEmitter(); let count = 0; emitter.on('ping', () => { count++; console.log(`Ping count: ${count}`); }); emitter.emit('ping'); emitter.emit('ping');
B. const EventEmitter = require('events'); const emitter = new EventEmitter(); let count = 0; emitter.emit('ping', () => { count++; console.log(`Ping count: ${count}`); });
C. const EventEmitter = require('events'); const emitter = new EventEmitter(); let count = 0; emitter.on('ping', count++); emitter.emit('ping');
D. const EventEmitter = require('events'); const emitter = new EventEmitter(); let count = 0; emitter.on('ping', () => count++); emitter.emit('ping'); console.log(`Ping count: ${count}`);

Solution

  1. Step 1: Understand event counting logic

    We need to increase count and log it inside the event listener each time 'ping' is emitted.
  2. Step 2: Analyze each option

    const EventEmitter = require('events'); const emitter = new EventEmitter(); let count = 0; emitter.on('ping', () => { count++; console.log(`Ping count: ${count}`); }); emitter.emit('ping'); emitter.emit('ping'); correctly registers a listener that increments and logs count on each 'ping'. const EventEmitter = require('events'); const emitter = new EventEmitter(); let count = 0; emitter.emit('ping', () => { count++; console.log(`Ping count: ${count}`); }); wrongly uses emit with a callback. const EventEmitter = require('events'); const emitter = new EventEmitter(); let count = 0; emitter.on('ping', count++); emitter.emit('ping'); passes count++ directly, which is incorrect. const EventEmitter = require('events'); const emitter = new EventEmitter(); let count = 0; emitter.on('ping', () => count++); emitter.emit('ping'); console.log(`Ping count: ${count}`); increments count but logs outside the event, so only logs once.
  3. Final Answer:

    Option A code correctly counts and logs on each ping event -> Option A
  4. Quick Check:

    Increment and log inside on() callback [OK]
Hint: Increment count inside on() callback, not outside [OK]
Common Mistakes:
  • Passing callback to emit() instead of on()
  • Incrementing count outside event listener
  • Using count++ directly as listener instead of function