Key Concepts:
- EventEmitter: This class is the core of the
eventsmodule, allowing you to create, listen for, and trigger events. - emit(): Emits an event, triggering all the listeners attached to that event.
- on(): Attaches a listener function to a specific event.
Usage of the Event Module
Here’s a basic example demonstrating how to use the events module:
Import the EventEmitter class:
const EventEmitter = require('events');Create an instance of EventEmitter:
const eventEmitter = new EventEmitter();Register an event listener using
on():eventEmitter.on('greet', () => { console.log('Hello, world!'); });Trigger an event using
emit():eventEmitter.emit('greet'); // Outputs: Hello, world!
Example: Passing Data with Events
You can also pass data when emitting an event:
const EventEmitter = require('events');
const eventEmitter = new EventEmitter();
// Register listener with arguments
eventEmitter.on('greet', (name) => {
console.log(`Hello, ${name}!`);
});
// Emit the event with a parameter
eventEmitter.emit('greet', 'John');
// Outputs: Hello, John!
Removing Event Listeners
You can remove event listeners using removeListener() or removeAllListeners():
const greet = () => {
console.log('Hello, world!');
};
eventEmitter.on('greet', greet);
// Remove the listener
eventEmitter.removeListener('greet', greet);
EventEmitter Methods:
on(event, listener): Attaches a listener for the specified event.emit(event, [arg1], [arg2], [...]): Emits the specified event, calling all attached listeners.once(event, listener): Attaches a listener that is called at most once.removeListener(event, listener): Removes the specified listener.removeAllListeners([event]): Removes all listeners for the event.listeners(event): Returns an array of listeners for the event.
Example: Using once()
The once() method attaches a listener that is called only once:
eventEmitter.once('greetOnce', () => {
console.log('This will only be logged once');
});
eventEmitter.emit('greetOnce'); // Outputs: This will only be logged once
eventEmitter.emit('greetOnce'); // No output
Inheriting from EventEmitter
In Node.js, it's common to extend the EventEmitter class to make custom classes emit events:
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
// Register event listener
myEmitter.on('event', () => {
console.log('An event occurred!');
});
// Emit the event
myEmitter.emit('event');
// Outputs: An event occurred!
Real-World Usage
The events module is widely used in Node.js for handling things like:
- Streams: Both readable and writable streams are event emitters.
- HTTP Requests: The
requestandresponseobjects in HTTP are also event emitters. - Timers: You can listen to
setTimeout,setInterval, etc., via events.
No comments:
Post a Comment