Node.js EventEmitter 学习笔记

Node.js 的 EventEmitter 模块提供了一种简单但强大的方式来处理事件与回调函数之间的关系。该模块被广泛应用于 Node.js 中的各种核心模块以及第三方库的开发中。

EventEmitter 类

EventEmitter 类是 Node.js 事件处理的核心,可以通过 require('events').EventEmitter 来引入该模块。

javascriptCopy Code
const EventEmitter = require('events').EventEmitter;

EventEmitter 实例方法

以下是常用的 EventEmitter 实例方法:

on(eventName, listener)

添加事件监听器,用于监听某个特定事件。

javascriptCopy Code
emitter.on('eventName', function listener() {});

once(eventName, listener)

添加一次性事件监听器,用于监听某个特定事件,只会触发一次。

javascriptCopy Code
emitter.once('eventName', function listener() {});

emit(eventName[, arg1][, arg2][, ...])

触发指定事件,并将可选参数传递给监听器回调函数。

javascriptCopy Code
emitter.emit('eventName', arg1, arg2);

removeListener(eventName, listener)

从事件监听器数组中删除指定事件的某个监听器。

javascriptCopy Code
emitter.removeListener('eventName', listener);

removeAllListeners([eventName])

从事件监听器数组中删除指定事件或所有事件的所有监听器。

javascriptCopy Code
emitter.removeAllListeners('eventName'); emitter.removeAllListeners();

EventEmitter 实例示例

以下示例演示了如何使用 EventEmitter 来创建和监听事件:

javascriptCopy Code
const EventEmitter = require('events').EventEmitter; const emitter = new EventEmitter(); // 添加事件监听器 emitter.on('newListener', function(eventName, listener) { console.log('添加新的监听器:', eventName); }); // 添加事件 emitter.emit('eventName'); // 添加一次性事件监听器 emitter.once('eventName', function() { console.log('这个监听器只会触发一次'); }); // 触发事件 emitter.emit('eventName'); // 移除事件监听器 const listener = function() {}; emitter.on('eventName', listener); console.log('添加监听器后的事件个数:', emitter.listenerCount('eventName')); emitter.removeListener('eventName', listener); console.log('移除监听器后的事件个数:', emitter.listenerCount('eventName')); // 移除所有事件监听器 emitter.removeAllListeners();

总结

事件驱动机制是 Node.js 强大的特性之一,EventEmitter 基于此实现了简单而强大的事件处理模型。通过本文的学习,我们了解了 EventEmitter 类以及其常用实例方法,并通过示例演示了如何使用 EventEmitter 来创建和监听事件。