Node.js EventEmitter

EventEmitter 是 Node.js 中的一个核心类,它实现了事件驱动的编程模式。EventEmitter 类允许你定义事件监听器,并在特定条件下触发这些监听器。它是许多 Node.js 内置模块的基础,例如 nethttpfs 模块等。

创建 EventEmitter 实例

要使用 EventEmitter,首先需要从 events 模块导入它,然后创建一个新的实例。

const EventEmitter = require('events');

const myEmitter = new EventEmitter();

注册事件监听器

你可以使用 on 方法注册事件监听器。当特定事件被触发时,相应的监听器就会被调用。

myEmitter.on('event-name', function listener() {
  console.log('An event occurred!');
});

触发事件

使用 emit 方法来触发事件。你可以传递任意数量的参数给事件监听器。

myEmitter.emit('event-name', 'This is the first argument', 'And this is the second one');

示例:使用 EventEmitter

下面是一个简单的示例,展示了如何使用 EventEmitter

const EventEmitter = require('events');

class MyEventEmitter extends EventEmitter {}

const myEmitter = new MyEventEmitter();

// 注册事件监听器
myEmitter.on('custom-event', (arg1, arg2) => {
  console.log('Event triggered with arguments:', arg1, arg2);
});

// 触发事件
myEmitter.emit('custom-event', 'Hello', 'World');

// 注册第二个监听器
myEmitter.on('custom-event', () => {
  console.log('Second listener triggered');
});

// 再次触发事件
myEmitter.emit('custom-event', 'Goodbye', 'Moon');

EventEmitter 的方法

EventEmitter 提供了一系列的方法来帮助你管理事件和监听器。

emitter.on(eventName, listener)

注册一个监听器到指定的事件上。

emitter.emit(eventName[, ...args])

触发一个事件,并可选地传递参数给监听器。

emitter.once(eventName, listener)

注册一个监听器到指定的事件上,但只会被触发一次。

emitter.removeListener(eventName, listener)

移除指定的监听器。

emitter.removeAllListeners([eventName])

移除所有监听器,或者仅移除特定事件的所有监听器。

emitter.listeners(eventName)

返回一个监听器数组,这些监听器被注册到了特定事件上。

emitter.prependListener(eventName, listener)

on 类似,但在事件监听器数组的开头添加新的监听器。

emitter.prependOnceListener(eventName, listener)

once 类似,但在事件监听器数组的开头添加新的监听器,且只会被触发一次。

emitter.setMaxListeners(n)

设置最大监听器数量。默认情况下,每个事件的最大监听器数量是 10。

emitter.eventNames()

返回所有事件名称的数组。

emitter.listenerCount(eventName)

返回指定事件的监听器数量。

示例:使用 EventEmitter 实现简单的计数器

下面是一个更具体的示例,展示如何使用 EventEmitter 实现一个简单的计数器。

const EventEmitter = require('events');

class Counter extends EventEmitter {
  constructor() {
    super();
    this.count = 0;
  }

  increment() {
    this.count++;
    this.emit('count-updated', this.count);
  }
}

const counter = new Counter();

counter.on('count-updated', (newCount) => {
  console.log('Counter updated:', newCount);
});

// 增加计数器
counter.increment();
counter.increment();
counter.increment();

总结

EventEmitter 是 Node.js 中非常重要的类,它提供了创建事件驱动程序的基础。通过使用 EventEmitter,你可以轻松地为你的应用程序添加事件驱动的功能,从而实现更加灵活和响应迅速的设计。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值