📜  Node.js 中的 EventEmitter 是什么?

📅  最后修改于: 2022-05-13 01:56:42.752000             🧑  作者: Mango

Node.js 中的 EventEmitter 是什么?

EventEmitter 是 node.js 中的一个类,负责处理使用 node.js 中的“事件”模块创建的事件。创建事件以在执行一组操作时进行自定义操作。如果我们想创建一个新的事件监听器,EventEmitter 可以返回两个属性,即newListener ,当我们想删除现有的事件监听器时,它可以返回removeListener 。每当调用执行操作时,这两个提到的属性都会发出一个事件。

为了对 EventEmitter 执行操作,我们需要使用“事件”模块创建一个引用,然后我们需要初始化 EventEmitter 的一个实例,以便我们可以进一步使用它。

句法:

// Creating a constant reference of EventEmitter
const EventEmittter = require('events');

// Initializing instance of EventEmitter
var emitter = new EventEmitter();

使用 addListener 创建监听事件:在我们发出事件之前,我们必须创建一个监听器来监听发出的回调,然后监听器将继续执行符合事件所需的进一步操作。我们可以借助 EventEmitter 的addListener属性创建一个事件监听器。 addListener将事件附加到数组的末尾,因此我们可以多次调用它来调用事件的多个实例,并且非常有用,因为我们不需要多次编写事件。

句法:

emitter.addListener(eventName, listener);

发射事件:由于每个事件都是 node.js 中的一个命名事件,我们可以使用 emit 方法触发一个事件,我们可以传递任意参数来监听事件。

句法:

emitter.emit(eventName, arg1,arg2,...)

示例:用于创建 EventEmitter 并使用 addListener 方法添加事件的代码。

Javascript
// Importing the events module
const EventEmitter = require('events');
    
// Initializing instance of EventEmitter to be used
var emitter = new EventEmitter();
   
// Adding listener to the event
emitter.addListener('welcomeEvent', (name) => {
   console.log("welcome " + name);
});
   
// Emitting the welcomeEvent
emitter.emit('myEvent', "Geek");


Javascript
// Importing the events module
const EventEmitter = require('events');
    
// Initializing instance of EventEmitter to be used
var emitter = new EventEmitter();
   
// Creating events 
var robot1 = (msg) => {
    console.log("Message from person1: " + msg);
};
    
var person2 = (msg) => {
    console.log("Message from person2: " + msg);
};
   
// Registering person1 and person2 with the printEvent
emitter.addListener('printEvent', person1);
emitter.addListener('printEvent', person2);
    
// Triggering the created event
emitter.emit('printEvent', "Event occurred");
   
// Removing all the listeners associated with the event
emitter.removeAllListeners('printEvent');
   
// Triggering the event again but no output
// as all listeners are removed
emitter.emit('printEvent', "Event occurred");


输出:

welcome Geek

删除事件实例:如果我们想从事件中删除特定的侦听器,我们可以使用两种方法removeListener删除事件,如果我们想从事件中删除所有侦听器的实例,则可以使用removeAllListeners方法。

句法:

// For removing any single listener form the event
emitter.removeListener(eventName, listener)

// For removing all listeners of the event
emitter.removeAllListeners(eventName)

示例:用于删除事件的事件侦听器的代码。

Javascript

// Importing the events module
const EventEmitter = require('events');
    
// Initializing instance of EventEmitter to be used
var emitter = new EventEmitter();
   
// Creating events 
var robot1 = (msg) => {
    console.log("Message from person1: " + msg);
};
    
var person2 = (msg) => {
    console.log("Message from person2: " + msg);
};
   
// Registering person1 and person2 with the printEvent
emitter.addListener('printEvent', person1);
emitter.addListener('printEvent', person2);
    
// Triggering the created event
emitter.emit('printEvent', "Event occurred");
   
// Removing all the listeners associated with the event
emitter.removeAllListeners('printEvent');
   
// Triggering the event again but no output
// as all listeners are removed
emitter.emit('printEvent', "Event occurred");

输出:

Message from person1: Event occurred
Message from person2: Event occurred

正如您在上面看到的,输出事件被触发了两次,但输出仅出现一次,因为我们删除了事件侦听器,因此在第二次发出事件时没有侦听器存在。