EventEmitter
const EventEmitter = require('events');\n\nclass OrderSystem extends EventEmitter {\n constructor() {\n super();\n this.orders = [];\n }\n\n placeOrder(items) {\n const order = { id: this.orders.length + 1, items, status: 'pending' };\n this.orders.push(order);\n \n this.emit('order:placed', order);\n \n setTimeout(() => {\n order.status = 'confirmed';\n this.emit('order:confirmed', order);\n }, 1000);\n \n return order;\n }\n}\n\nconst system = new OrderSystem();\n\n// Listen for events\nsystem.on('order:placed', (order) => {\n console.log(`Order #${order.id} placed with ${order.items.length} items`);\n});\n\nsystem.on('order:confirmed', (order) => {\n console.log(`Order #${order.id} confirmed!`);\n});\n\n// Handle errors\nprocess.on('uncaughtException', (err) => {\n console.error('Uncaught:', err);\n process.exit(1);\n});\n\nprocess.on('unhandledRejection', (reason) => {\n console.error('Unhandled Rejection:', reason);\n});
EventEmitter Methods
emitter.on(event, listener) // Add listener\nemitter.once(event, listener) // Listen once then remove\neventEmitter.emit(event, ...args) // Emit event\nemitter.removeListener(event, fn) // Remove listener\nemitter.removeAllListeners(event) // Remove all\nemitter.listeners(event) // Get all listeners
Examples
const EventEmitter = require('events');
// Simple logger with events
class Logger extends EventEmitter {
log(level, message) {
const entry = {
level,
message,
timestamp: new Date().toISOString(),
};
this.emit('log', entry);
if (level === 'error') {
this.emit('error', entry);
}
}
info(msg) { this.log('info', msg); }
warn(msg) { this.log('warn', msg); }
error(msg) { this.log('error', msg); }
}
const logger = new Logger();
logger.on('error', (entry) => {
console.error(`[${entry.timestamp}] ERROR: ${entry.message}`);
});
logger.on('log', (entry) => {
console.log(`[${entry.timestamp}] ${entry.level.toUpperCase()}: ${entry.message}`);
});
logger.info('Application started');
logger.warn('Disk space low');
logger.error('Database connection failed');