events 模块只提供了一个对象: events.EventEmitter。EventEmitter 的核心就是事件触发与事件监听器功能的封装。
EventEmitter 对象如果在实例化时发生错误,会触发 error 事件。当添加新的监听器时,newListener 事件会触发,当监听器被移除时,removeListener 事件被触发。
EventEmitter 提供了多个属性,如 on 和 emit。on 函数用于绑定事件函数,emit 属性用于触发一个事件
//引入events模块
var events = require('events');
var eventEmitter = new events.EventEmitter();
var handler01 = function connectHandler(agr1){
console.log('connectHandler', agr1);
//执行disconnectHandler事件
eventEmitter.emit('disconnectHandler');
};
var handler02 = function disconnectHandler(){
console.log('disconnectHandler');
};
//注册且绑定connectHandler&disconnectHandler监听器
eventEmitter.on('connectHandler', handler01);
eventEmitter.on('disconnectHandler', handler02);
//延迟1s向EvnetEmitter发送connectHandler事件
setTimeout(() => {
eventEmitter.emit('connectHandler', 'connectH');
}, 1000);
console.log('执行');
var events = require('events');
var eventEmitter = new events.EventEmitter();
// 监听器 #1
var listener1 = function listener1() {
console.log('监听器 listener1 执行。');
}
// 监听器 #2
var listener2 = function listener2() {
console.log('监听器 listener2 执行。');
}
// 绑定 connection 事件,处理函数为 listener1
eventEmitter.addListener('connection', listener1);
// 绑定 connection 事件,处理函数为 listener2
eventEmitter.on('connection', listener2);
var eventListeners = eventEmitter.listenerCount('connection');
console.log(eventListeners + " 个监听器监听连接事件。");
// 处理 connection 事件
eventEmitter.emit('connection');
// 移除监绑定的 listener1 函数
eventEmitter.removeListener('connection', listener1);
console.log("listener1 不再受监听。");
// 触发连接事件
eventEmitter.emit('connection');
eventListeners = eventEmitter.listenerCount('connection');
console.log(eventListeners + " 个监听器监听连接事件。");
console.log("程序执行完毕。");
结果:
执行
2 个监听器监听连接事件。
监听器 listener1 执行。
监听器 listener2 执行。
listener1 不再受监听。
监听器 listener2 执行。
1 个监听器监听连接事件。
程序执行完毕。
参考:https://www.runoob.com/nodejs/nodejs-event.html