Nodejs学习之事件循环

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

你可能感兴趣的:(Nodejs,nodejs)