Nodejs事件 内置模块event 实现node event

Nodejs事件 内置模块event 实现node event

内置模块event

  1. 导入 const eventEmitter = require('event');
  2. 继承eventEmitter类
  3. 使用on方法监听,此方法的回调可多次执行
  4. 使用once方法监听,此方法的回调只执行一次
  5. 使用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");

猜你喜欢

转载自www.cnblogs.com/ltfxy/p/12549541.html