Nodejs—events事件模块入门(图文)

Nodejs—events事件模块入门

概念:nodejs使用事件驱动,events事件模块就是帮助nodejs来处理事件,对事件进行监听

  • 绑定触发events事件
// 引入events模块
const events = require('events');
// 创建一个eventEmitter对象
const eventEmitter = new events.EventEmitter();
// 添加test事件
// 第一个参数: 事件名
// 第二个参数: 函数
eventEmitter.addListener('test', function () {
    console.log('test事件被触发')
})
// 触发test事件
eventEmitter.emit('test')

结果:
在这里插入图片描述

  • 传参
const events = require('events');
const eventEmitter = new events.EventEmitter();
eventEmitter.addListener('test', callback);
function callback (num) {
    console.log('传参' + num)
}
eventEmitter.emit('test', 100);

结果:
在这里插入图片描述

events事件:观察者模,始终观察者观察你的动作,如果违反规则就会触发该事件

  • events事件模拟案例看一下到底是干啥的
const events = require('events');
const eventEmitter = new events.EventEmitter();
// 创建一个定时器,500毫秒创建一个随机数
var timer = setInterval(function () {
    const random = parseInt(Math.random() * 100);
    console.log(random);
    if (random > 95) { // 如果随机数大于95,触发randomFn的事件
        eventEmitter.emit('randomFn');
    }
}, 500)
// 既可以用on绑定事件也可以用addListener绑定事件
eventEmitter.on('randomFn', function () { // 绑定randomFn事件
    clearInterval(timer) // 清除定时器,停止创建随机数
    console.log('随机数大于95,定时器被清除')
})

结果:
在这里插入图片描述

  • 绑定多个函数并查询函数数量
const events = require('events');
const eventEmitter = new events.EventEmitter();
// test事件绑定多个函数会由上到下依次执行
eventEmitter.addListener('test', function () {
    console.log('0')
})
eventEmitter.addListener('test', function () {
    console.log('1')
})
eventEmitter.addListener('test', function () {
    console.log('2')
})
eventEmitter.emit('test')
console.log('绑定事件个数:', eventEmitter.listenerCount('test'));

结果:
在这里插入图片描述

  • 绑定超过10个函数发起警告
const events = require('events');
const eventEmitter = new events.EventEmitter();
// 如果绑定函数超过10个会发起警告 用emitter.setMaxListeners(),要在监听前写,不然没有效果
// 设置绑定函数最大值为15个,就不会发起警告
eventEmitter.setMaxListeners(15)
// 如果取消最大值的设置,可以直接设置成0,也不会发起警告
// eventEmitter.setMaxListeners(0)
eventEmitter.addListener('test', function () {
    console.log('0')
})
eventEmitter.addListener('test', function () {
    console.log('1')
})
eventEmitter.addListener('test', function () {
    console.log('2')
})
eventEmitter.addListener('test', function () {
    console.log('3')
})
eventEmitter.addListener('test', function () {
    console.log('4')
})
eventEmitter.addListener('test', function () {
    console.log('5')
})
eventEmitter.addListener('test', function () {
    console.log('6')
})
eventEmitter.addListener('test', function () {
    console.log('7')
})
eventEmitter.addListener('test', function () {
    console.log('8')
})
eventEmitter.addListener('test', function () {
    console.log('9')
})
eventEmitter.addListener('test', function () {
    console.log('10')
})
eventEmitter.emit('test')
console.log('绑定事件个数:', eventEmitter.listenerCount('test'));

结果:
在这里插入图片描述

  • 移除事件监听
const events = require('events');
const eventEmitter = new events.EventEmitter();
eventEmitter.addListener('test', callback);
function callback () {
    console.log('事件被触发')
}
eventEmitter.emit('test');
// 移除事件监听
eventEmitter.removeListener('test', callback);
console.log('剩余函数个数:', eventEmitter.listenerCount('test'));

结果:
在这里插入图片描述

  • 自定义事件监听
const events = require('events');
// util是一个js工具,有很多功能
const util = require('util');
// 先写一个自定义的构造函数
function BaseEmitter () {
    this.emitter = new events.EventEmitter();
}
// util的继承功能,子类继承父类的功能
// 第一个参数:子类
// 第二个参数:父类
util.inherits(BaseEmitter, events.EventEmitter);

// 实现addListener的功能
BaseEmitter.prototype.addEvent = function (eventName, callback) {
    this.emitter.addListener(eventName, callback);
}

// 事件emit的功能
BaseEmitter.prototype.emitEvent = function (eventName, arg) {
    this.emitter.emit(eventName, arg);
}

// 调用自定义事件BaseEmitter
const baseEmitter = new BaseEmitter();
baseEmitter.addEvent('test', function () {
    console.log('绑定事件被触发')
})
baseEmitter.emitEvent('test');

结果:
在这里插入图片描述

发布了157 篇原创文章 · 获赞 15 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/Poppy_LYT/article/details/100134535
今日推荐