1. 介绍event模块
Node.js内置了一个event模块,通过该模块,可以实现发布订阅模式。下面主要介绍如何使用event模块。
2. EventEmitter类
Node.js中的event模块提供了一个EventEmitter类,用于实现事件发射与事件监听器功能。以下是创建EventEmitter实例示例:
const EventEmitter = require('events');
const emitter = new EventEmitter();
2.1 EventEmitter.on()
EventEmitter.on()方法用于注册事件监听器,接收两个参数,第一个参数为目标事件名称,第二个参数为回调函数。下面是使用EventEmitter.on()方法注册事件监听器的示例:
emitter.on('event_name', () => {
console.log('event_name occurred.');
});
2.2 EventEmitter.emit()
EventEmitter.emit()方法用于触发事件,接收两个参数,第一个参数为目标事件名称,第二个参数为事件数据(可选)。以下是使用EventEmitter.emit()方法触发事件的示例:
emitter.emit('event_name');
2.3 EventEmitter.once()
EventEmitter.once()方法也用于注册事件监听器,但是注册的监听器仅会触发一次。与EventEmitter.on()的区别在于注册监听器的次数不同。以下是使用EventEmitter.once()方法注册事件监听器的示例:
emitter.once('event_name', () => {
console.log('event_name occurred.');
});
2.4 EventEmitter.removeListener()
EventEmitter.removeListener()方法用于移除事件监听器,接收两个参数,第一个参数为目标事件名称,第二个参数为需要移除的监听器函数。以下是使用EventEmitter.removeListener()方法移除事件监听器的示例:
const listener = () => {
console.log('event_name occurred.');
};
emitter.on('event_name', listener);
emitter.removeListener('event_name', listener);
2.5 EventEmitter.removeAllListeners()
EventEmitter.removeAllListeners()方法用于移除所有事件监听器,接收一个参数,即目标事件名称。以下是使用EventEmitter.removeAllListeners()方法移除所有事件监听器的示例:
emitter.removeAllListeners('event_name');
3. 发布订阅模式实现
有了对EventEmitter类的了解,我们可以轻松实现发布订阅模式。下面是一个示例,订阅了事件'temperature_change',当温度达到设定值时触发该事件:
class Thermostat extends EventEmitter {
constructor(temp) {
super();
this._temperature = temp;
}
get temperature() {
return this._temperature;
}
set temperature(value) {
if (value !== this._temperature) {
this._temperature = value;
this.emit('temperature_change', value);
}
}
}
const thermo = new Thermostat(22);
thermo.on('temperature_change', (newTemp) => {
console.log(`Temperature changed: ${newTemp}`);
});
上述代码中定义了一个名为Thermostat的类,该类继承了EventEmitter类。在Thermostat类内部,当温度发生变化时,使用EventEmitter.emit()方法触发'temperature_change'事件。在实例化Thermostat对象时,我们可以使用EventEmitter.on()方法订阅事件'temperature_change',并指定回调函数当事件触发时要执行的操作。
4. 总结
使用Node.js内置的EventEmitter类,我们可以轻松地实现发布订阅模式,实现事件发射与监听器功能。EventEmitter类提供了常用的方法,例如on()、emit()、once()、removeListener()、removeAllListeners()。通过这些方法,我们可以实现具体的功能,例如注册事件监听器、触发事件、移除事件监听器等。在实际的开发中,我们可以利用EventEmitter类,编写高效可靠的代码。