Node.js 什么是EventEmitter

Node.js 什么是EventEmitter

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

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

语法:

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

// Initializing instance of EventEmitter
const emitter = new EventEmitter();
JavaScript

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

语法:

emitter.addListener(eventName, listener);
JavaScript

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

语法:

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

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

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

输出:

welcome Geek
JavaScript

移除一个事件的实例: 我们可以使用两种方法来移除一个事件: 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
const emitter = new EventEmitter();
 
// Creating events
const person1 = (msg) => {
    console.log("Message from person1: " + msg);
};
 
const 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");
JavaScript

输出:

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

正如你在上述输出中能够看到的,事件被触发了两次,但输出只出现了一次,因为我们删除了事件监听器,所以第二次触发事件时没有监听器存在。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册