nodejs event driven - simulated events

Table of contents

simulated event

API

event registration

event unbundling


simulated event

Much of Node.js ' core API is built around an idiomatic asynchronous event-driven architecture, in which certain types of objects ( called " triggers ") fire named events, making Function objects (" listeners") device ") is called.
The event driving in nodejs is accomplished by using the API in the trigger, and EventEmitter is a trigger.
let EventEmitter = require('events')
console.log(EventEmitter);

EventEmitter prints the result:

 It can be seen that EventEmitter is a class, or a constructor. Its internal EventEmitter is the same as EventEmitter, namely:

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

We can deconstruct the EventEmitter and rename it to temp:

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

We can create an EventEmitter instance, and then call the method in EventEmitter through the instance:

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

API

Event registration:

emitter.on(eventName, listener)

emitter.addListener(eventName, listener)
emitter.once(eventName, listener)
Event Emitter: (trigger event using event emitter)
emitter.emit(eventName[,param,param])
Returns an array listing the events for which the trigger has registered listeners:
emitter.eventNames()
Returns a copy of the array of listeners for the event named eventName:
emitter.listeners(eventName)
Event unbundling:
emitter.off(eventName, listener)
emitter.removeListener(eventName, listener)
emitter.removeAllListeners([eventName])

event registration

Event registration can use the on, addListener, and once methods. They all have two parameters. The first parameter indicates the event name, and the second parameter indicates the event handler. We can pass parameters to the event handler.

An event can be registered multiple times using the on method.

Use the once method to register an event, and the event will be destroyed once it is called.

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'));

The result is as follows:

event unbundling

Event unbinding can use off, removeListener, removeAllListeners methods.

Use removeAllListeners to unbind all events at once.

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'));//[]

Guess you like

Origin blog.csdn.net/lq313131/article/details/127619195