nodejs事件驱动——模拟事件

目录

模拟事件

API

事件注册

事件解绑


模拟事件

Node.js 的⼤部分核⼼ API 都是围绕惯⽤的异步事件驱动架构构建的,在该架构中,某些类型的对象( 称为 " 触发器 ") 触发命名事件,使 Function 对象 (" 监听器 ") 被调⽤。
nodejs中的事件驱动是利用触发器中的API来进行完成的,EventEmitter就是一个触发器。
let EventEmitter = require('events')
console.log(EventEmitter);

EventEmitter打印结果:

 可以看出EventEmitter是一个类,或者说是一个构造函数。它内部的EventEmitter和EventEmitter是一样的,即:

console.log(EventEmitter.EventEmitter === EventEmitter); //true

我们可以将EventEmitter解构出来,并重命名为temp:

let {EventEmitter:temp} = require('events')
console.log(temp);

我们可以创建一个EventEmitter实例,然后通过实例调用EventEmitter中的方法:

let EventEmitter = require('events')
// 创建一个EventEmitter实例
let emitter = new EventEmitter()
// 调用EventEmitter中的on方法
emitter.on('event',()=>{
  console.log('event');
})
// 触发事件
emitter.emit('event')

API

事件注册:

emitter.on(eventName, listener)

emitter.addListener(eventName, listener)
emitter.once(eventName, listener)
事件发射器:(触发事件使用事件发射器)
emitter.emit(eventName[,param,param])
返回列出触发器已为其注册监听器的事件的数组:
emitter.eventNames()
返回名为 eventName 的事件的监听器数组的副本:
emitter.listeners(eventName)
事件解绑:
emitter.off(eventName, listener)
emitter.removeListener(eventName, listener)
emitter.removeAllListeners([eventName])

事件注册

事件注册可以使用on、addListener、once方法,它们都有两个参数,第一个参数表示事件名,第二个参数表示事件处理程序,我们可以给事件处理程序传递参数。

使用on方法可以注册一个事件多次。

使用once方法注册事件,事件被调用一次就会被销毁。

let EventEmitter = require('events');
// 声明发射器 
let emitter = new EventEmitter();
// 注册事件 on 
emitter.on('event',(params)=>{
	console.log('event',params)
});
emitter.on('event',(params)=>{
	console.log('另一个event',params)
});
// 注册事件 方式 addListener 参数:事件名称 事件处理程序
emitter.addListener('event1',(params)=>{
	console.log('event1',params);
});
emitter.addListener('event2',(params)=>{
	console.log('event2',params);
});
// 注册事件 once  一次绑定 触发完解绑
emitter.once('event3',(params)=>{
	console.log('event3',params);
});
console.log(emitter.eventNames(),'触发事件之前');
// 触发事件
emitter.emit('event',100);
emitter.emit('event1',100);
emitter.emit('event2',100);
emitter.emit('event3',100);
// 返回已经注册事件的数组
console.log(emitter.eventNames(),'触发事件之后');
// 返回事件的事件监听器
console.log(emitter.listeners('event'));

结果如下:

事件解绑

事件解绑可以使用off、removeListener、removeAllListeners方法。

使用removeAllListeners可以一次性解绑所有事件。

let EventEmitter = require('events');
let emitter = new EventEmitter();
// 注册事件 
function handler(params){
	console.log(params+'event')
}
function handler1(params){
	console.log(params+'另一个event')
}
emitter.on('event',handler);
emitter.on('event',handler1);
// 返回事件的事件监听器组成数组的副本
console.log(emitter.listeners('event'));
// 解绑事件
// emitter.off('event',handler);
// emitter.removeListener('event',handler1);
// 一次性解绑全部事件监听器 事件名称
emitter.removeAllListeners('event');
console.log(emitter.listeners('event'));//[]

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值