Node.js 内置模块 events 为发布-订阅模式提供了基础。该模块提供了两个类:EventEmitter 和 Class。EventEmitter 是所有事件侦听器类的父类,而 Class 则使其更容易地进行继承。
EventEmitter 类
EventEmitter 类提供了一些方法来操作事件:
- on(eventName, listener) - 添加一个监听器
- once(eventName, listener) - 添加一个只回调一次的监听器
- emit(eventName, [...args]) - 触发事件
- removeListener(eventName, listener) - 移除一个监听器
- removeAllListeners([eventName]) - 移除所有监听器
- setMaxListeners(n) - 设置事件监听器最大个数
以下是一个简单的示例,演示如何使用 EventEmitter 类。我们首先需要使用 require 函数引入 events 模块:
const EventEmitter = require('events');
接下来,我们创建一个新的 EventEmitter 实例:
const emitter = new EventEmitter();
我们现在可以为该实例添加一个监听器,使用 on 方法。以下代码演示如何添加一个监听器:
emitter.on('eventName', (...args) => {
console.log('event triggered with args: ', ...args);
});
我们可以使用 emit 方法触发事件:
emitter.emit('eventName', 'arg1', 'arg2');
运行上述代码将输出以下内容:
event triggered with args: arg1 arg2
我们可以使用 removeListener 方法来移除对应的监听器:
emitter.removeListener('eventName', listener);
如果要移除所有监听器,可以使用 removeAllListeners 方法:
emitter.removeAllListeners('eventName');
Class 类
Class 是 EventEmitter 类的简单扩展,旨在更轻松地创建自定义对象,该对象可以通过事件的方式进行通信。
以下是一个简单的示例,演示如何使用 Class 类。首先,我们需要使用 require 函数引入 events 模块:
const { EventEmitter } = require('events');
接下来,我们创建一个新的类,该类扩展 EventEmitter 类:
class MyClass extends EventEmitter {
constructor() {
super();
}
myMethod() {
this.emit('eventName', 'arg1', 'arg2');
}
}
该类定义了一个新方法 myMethod,该方法触发了一个名为 eventName 的事件,并传递了两个参数 'arg1' 和 'arg2'。
我们可以使用 create 方法来创建该类的新实例,并添加一个监听器:
const instance = new MyClass();
instance.on('eventName', (...args) => {
console.log('event triggered with args: ', ...args);
});
instance.myMethod();
运行上述代码将输出以下内容:
event triggered with args: arg1 arg2
以上是使用 EventEmitter 和 Class 类使用事件的基本示例。事件非常灵活,可以轻松地添加到您的应用程序中以实现异步通信。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Node.js内置模块events事件监听发射详解 - Python技术站