events
介绍
许多 Node.js 核心 API 都是围绕惯用的异步事件驱动架构构建的,其中某些类型的对象
(称为“发射器”)发出命名事件,从而导致Function对象(“侦听器”)被调用。
功能
1、addListener() 在侦听器数组的末尾为指定的事件添加侦听器
2、on()在侦听器数组的末尾为指定的事件添加侦听器。
3、once()为事件添加一次性侦听器。 只有在下次触发事件时才会调用此侦听器,之后将其删除。
4、removeListener()从侦听器数组中删除指定事件的侦听器。
5、removeAllListeners()删除所有侦听器或指定事件的侦听器
6、listenerCount()返回指定事件的侦听器数量。
7、emit()使用提供的参数按顺序执行每个侦听器。 如果事件具有侦听器,则返回true,否则返回false。
const events = require('node:events');
var emitter = new events.EventEmitter();
// 1、on注册监听事件
emitter.on('test', function (arg) {
console.log('test1触发,传入参数为:' + arg);
});
emitter.on('test', function (arg) {
console.log('test2触发,传入参数为:' + arg);
});
emitter.on('test', function (arg) {
console.log('test3触发,传入参数为:' + arg);
});
// 2、addListener添加一个监听器
emitter.addListener('test', function (arg) {
console.log('新增test4触发,传入参数为:' + arg);
})
// 3、emit触发监听事件
emitter.emit('test', 'admin');
/*
结果如下:
test1触发,传入参数为:admin
test2触发,传入参数为:admin
test3触发,传入参数为:admin
新增test4触发,传入参数为:admin
*/
// 4、once注册单次监听器
emitter.once('onceEvent', function (count) {
console.log('单次监听器触发,二次将不存在' + count);
})
emitter.emit('onceEvent', 1);
emitter.emit('onceEvent', 2);
/*结果: 单次监听器触发,二次将不存在1*/
// 5、removeListener 移除指定监听事件
function callback(arg) {
console.log('test5触发,传入参数为:' + arg + '\n');
}
emitter.on('test', callback);
emitter.emit('test', 'admin');
emitter.removeListener('test', callback);
emitter.emit('test', 'admin');
/*结果只有一次: test5触发,传入参数为:admin*/
// 6、listenerCount返回指定事件的监听器数组
emitter.on('test', function (arg) {
console.log('test1触发,传入参数为:' + arg);
});
emitter.on('test', function (arg) {
console.log('test2触发,传入参数为:' + arg);
});
emitter.on('test', function (arg) {
console.log('test3触发,传入参数为:' + arg);
});
var count = emitter.listenerCount('test');
console.log(count);
/* 结果: 3*/
// 移除所有监听器
mitter.removeAllListeners();
/*
一旦一个事件被发射,所有在发射时附加到它的监听器都会被依次调用。这意味着 在发出之后和
最后一个侦听器完成执行之前removeListener()的任何orremoveAllListeners()调用都不会将它们从 正在进行的中删除。
*/
const events = require('node:events');
const myEmitter = new events.EventEmitter();
const callbackA = () => {
console.log('A++');
myEmitter.removeListener('event', callbackB);
};
const callbackB = () => {
console.log('B');
};
myEmitter.on('event', callbackA);
myEmitter.on('event', callbackB);
myEmitter.emit('event');
/*
结果:
A++
B
*/
myEmitter.emit('event');
/*
结果:
A++
*/