Node.js EventEmitter对象

Node.js EventEmitter对象

我们都知道 Node.js应用 以单线程事件驱动模型运行。然而,Node.js在应用程序的后台执行线程池,而应用程序本身不支持多线程。

这一切都是通过使用Node.js中的事件模型实现的。在本文中,我们将看到EventEmitter对象以及它如何创建事件和触发事件。但是您必须了解事件是什么。

事件处理 与回调函数非常相似,但回调函数是在异步函数返回结果时使用的,而事件处理基于观察者模式工作。在Node.js中,监听事件的函数被称为观察者。当事件发生时,监听函数开始执行。Node.js中有多个内置事件,如EventEmitter类。我们将展示如何在事件处理中使用EventEmitter类。

EventEmitter 是Node.js中提供的一个内置事件。Node.js的许多核心API都是围绕一种习惯的异步事件驱动架构构建的,其中某些类型的对象(称为“发射器”)发出命名事件,引发Function对象(“监听器”)被调用。EventEmitter帮助事件发射器触发事件,并使监听器以简单的方式对这些事件进行操作。

创建EventEmitter对象: 我们可以通过创建EventEmitter对象并使用它来触发事件。我们将提供EventEmitter对象创建的语法。在创建EventEmitter对象之前,您应该导入事件。

步骤1: 导入事件模块。

var events = require('events');

步骤2: 创建一个EventEmitter对象。

var eventEmitter = new events.EventEmitter();

步骤3: 然后将事件和事件处理程序绑定在一起

eventEmitter.on('eventName', eventHandler);

步骤4: 我们可以使用emit方法触发事件

eventEmitter.emit('eventName');

示例1: 在这个示例中,我们展示了如何创建一个EventEmitter对象 **** 然后通过使用 emit() 方法触发一个事件,并使用EventEmitter的 on() 方法绑定连接。当执行停止时,我们使用 emit() 方法来触发连接。

index.js

// Import events module
const events = require('events');
 
// Create an eventEmitter object
let eventEmitter = new events.EventEmitter()
// Create an event handler as follows
let connectHandler = function connected() {
    console.log('connection successful.');
    // Fire the data_received event 
    eventEmitter.emit('data_received');
}
 
// Bind the connection event with the handler
eventEmitter.on('connection', connectHandler);
 
// Bind the data_received event with the anonymous function
eventEmitter.on('data_received', function () {
    console.log('data received successfully.');
});
 
// Fire the connection event 
eventEmitter.emit('connection');
console.log("Program Ended.");

运行应用的步骤: 运行以下命令来执行script.js

node script.js

输出:

Node.js EventEmitter对象

扩展EventEmitter类: EventEmitter类支持继承。有时候你需要实现一个EventEmitter的子类。

示例2: 在这个示例中,MyEmitter继承了EventEmitter类。MyEmitter使用 on() 方法来监听事件。这个事件是通过 emit() 来触发的。

index.js

const EventEmitter = require('events');
 
class MyEmitter extends EventEmitter {
    foo() {
        this.emit('test');
    }
}
 
let myEmitter = new MyEmitter();
myEmitter.on('test', () => console.log('Yay, it works!'));
myEmitter.foo();

输出:

Node.js EventEmitter对象

EventEmitter类的特点:

  • 此类用于处理事件。
  • 它可以继承其他类的事件功能。
  • 它发出事件。
  • 它监听和处理事件。
  • 它帮助在后台运行多线程。

EventEmitter方法:

  • emitobj.on(event, listener)
  • emitobj.emit(event,[arg1],[arg2],..[argN])
  • emitobj.once(event, listener)
  • emitobj.removeListener(event, listener)

EventEmitter方法的实现:

示例: 在此示例中,我们看到了EventEmitter方法的实际应用。我们可以看到所有四种方法: on()、emit()、once()removeListener()

const events = require('events');
const eventEmitter = new events.EventEmitter();
 
// listener #1
let listener1 = function listener1() {
    console.log('listener1 executed.');
}
 
// listener #2
let listener2 = function listener2() {
    console.log('listener2 executed.');
}
 
// Bind the connection event with the listener1 function
eventEmitter.addListener('connection', listener1);
 
// Bind the connection event with the listener2 function
eventEmitter.on('connection', listener2);
 
let eventListeners = require('events').EventEmitter.listenerCount
    (eventEmitter, 'connection');
console.log(eventListeners + " Listener(s) listening to connection event");
 
// Fire the connection event 
eventEmitter.emit('connection');
 
// Remove the binding of listener1 function
eventEmitter.removeListener('connection', listener1);
console.log("Listener1 will not listen now.");
 
// Fire the connection event 
eventEmitter.emit('connection');
eventListeners = require('events').EventEmitter.listenerCount
    (eventEmitter, 'connection');
 
console.log(eventListeners + " Listener(s) listening to connection event");
console.log("Program Ended.");

输出:

Node.js EventEmitter对象

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程