Nodejs事件 内置模块event 实现node event
Nodejs事件 内置模块event 实现node event
内置模块event
- 导入 const eventEmitter = require('event');
- 继承eventEmitter类
- 使用on方法监听,此方法的回调可多次执行
- 使用once方法监听,此方法的回调只执行一次
- 使用emit方法抛发事件,在抛发的时候根据监听函数的回调次数也差异,如3,4
案例
const eventEmitter = require('events');
//继承父类获取订阅事件的方法
class MyEventEmitter extends eventEmitter{}
const em = new MyEventEmitter();
//注册play事件,可多次执行回调函数
// em.on("play",function(movie){
// console.log("play...",movie);
// });
// 注册play事件,只执行一次回调函数
em.once('play',function(movie){
console.log("play"+movie);
});
//抛发play事件
em.emit('play','西游记');
em.emit('play','封神榜');
实现eventEmiiter
/*
自定义事件
实现自己的event
Object Events
API:
//存储事件名和回调函数数组
listens:{
eventname1:[callback1,callback2...],
eventname2:[callback1,callback2...],
eventname3:[callback1,callback2...]
},
//注册事件,如果已经有此事件,把回调函数添加到该事件push到对应的数组下。
//如果没有此事件,注册事件并初始化回调函数数组
on: function (eventname, callback) {
//如果没有事件名,初始化listen
if (!this.listen[eventname]) return this.listen[eventname] = [callback];
//如果有有事件名,把函数push到事件名对应的数组下,初始化
this.listen[eventname].push(callback);
},
//抛发事件,执行该事件下的所有回调函数
trigger: function (eventname) {
this.listen[eventname].forEach(fn => {
fn.call();
});
}
*/
var Events = {
listen: {},
on: function (eventname, callback) {
if (!this.listen[eventname]) return this.listen[eventname] = [callback];
this.listen[eventname].push(callback);
},
trigger: function (eventname) {
this.listen[eventname].forEach(fn => {
fn.call();
});
}
}
var ev = Events;
ev.on("play", cb => {
console.log("play success");
});
ev.trigger("play");