Events
单个侦听器的简单
EventEmitter
实例。该eventEmitter.on()
方法用于注册侦听器,而该eventEmitter.emit()
方法用于触发事件。
on 侦听器
js
const EventEmitter = require('node:events')
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter()
// 注册侦听器
myEmitter.on('event', function(a, b) {
console.log('参数:', a, b)
console.log('触发了一个事件', this);
// 侦听器函数可以使用 setImmediate() or process.nextTick() 方法切换到异步操作模式
setImmediate(() => {
console.log('异步发生的')
})
})
// 触发事件
myEmitter.emit('event', 'aa', 'bb');
once 侦听器
只触发一次事件
js
const EventEmitter = require('node:events')
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter()
let m = 0;
myEmitter.once('event', () => {
console.log(++m);
})
myEmitter.emit('event');
// 打印: 1
myEmitter.emit('event');
// 没有触发
错误兜底
js
// Node.js 能接收到异常,但是不会崩溃
const EventEmitter = require('node:events')
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter()
myEmitter.on('error', (err) => {
console.error('哎呀!有一个错误');
});
myEmitter.emit('error', new Error('whoops!'));
另一种方法
js
// 通过使用符号 events.errorMonitor 安装侦听器,可以在不使用发出的错误的情况下监视 'error' 事件
// Node.js 仍然会抛出异常并导致崩溃
const { EventEmitter, errorMonitor } = require('node:events')
const myEmitter = new EventEmitter()
myEmitter.on(errorMonitor, (err) => {
console.error('哎呀!有一个错误');
})
myEmitter.emit('error', new Error('whoops!'));