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++
*/
powered by GitbookEdit Time: 2023-04-08 10:28:32