EVENTS
events模块API实例
const EventEmitter = require(‘events‘); class MyEmitter extends EventEmitter { } //EventListener 会按照监听器注册的顺序同步地调用所有监听器。 //所以需要确保事件的正确排序且避免竞争条件或逻辑错误。 //监听器函数可以使用 setImmediate() 或 process.nextTick() 方法切换到异步操作模式: const myEmitter = new MyEmitter(); myEmitter.on(‘event‘, (a, b) => { setImmediate(() => { console.log(‘这个是异步发生的‘); }); }); myEmitter.on(‘event1‘, () => { console.log(‘触发了一个事件1!‘); }); myEmitter.on(‘event2‘, () => { console.log(‘触发了一个事件2!‘); }); //eventEmitter.once() 方法时可以注册一个对于特定事件最多被调用一次的监听器。 当事件被触发时,监听器会被注销,然后再调用。 let m = 0; myEmitter.once(‘event3‘, () => { console.log(++m); }); //当EventEmitter 实例中发生错误时,会触发一个 ‘error‘ 事件。 这在 Node.js 中是特殊情况。 //最佳实践,应该始终为 ‘error‘ 事件注册监听器。 myEmitter.on(‘error‘, (err) => { console.error(‘有错误‘); }); //emitter.prependListener() 方法可用于将事件监听器添加到监听器数组的开头。 myEmitter.prependListener(‘event‘, () => console.log(‘b‘)); //添加一个单次 listener 函数到名为 eventName 的事件的监听器数组的开头。 下次触发 eventName 事件时,监听器会被移除,然后调用。 myEmitter.prependOnceListener(‘event‘, (stream) => { console.log(‘c‘); }); myEmitter.emit(‘error‘, new Error(‘whoops!‘)); myEmitter.emit(‘event3‘); myEmitter.emit(‘event3‘); myEmitter.emit(‘event‘); myEmitter.emit(‘event2‘); myEmitter.emit(‘event1‘); myEmitter.emit(‘event‘);
const EventEmitter = require(‘events‘); class MyEmitter extends EventEmitter {} const myEmitter = new MyEmitter(); //this指向MyEmitter // myEmitter.on(‘event‘, function (a, b) { // console.log(a, b, this); // }); //this指向空对象 myEmitter.on(‘event‘, (a, b) => { console.log(a, b, this); // 打印: a b {} }); myEmitter.emit(‘event‘, ‘a‘, ‘b‘);
const EventEmitter = require(‘events‘); class MyEmitter extends EventEmitter { } const myEmitter = new MyEmitter(); // 当EventListener 所注册的事件发生的时候,该方法会被调用 myEmitter.once(‘newListener‘, (event, listener) => { if (event === ‘event‘) { // 在开头插入一个新的监听器 myEmitter.on(‘event‘, () => { console.log(‘B‘); }); } }); myEmitter.on(‘event‘, () => { console.log(‘A‘); }); myEmitter.emit(‘event‘); myEmitter.emit(‘event‘);
const EventEmitter = require(‘events‘); class MyEmitter extends EventEmitter { } const myEmitter = new MyEmitter(); // 在事件触发后、最后一个监听器完成执行后,从名为 eventName 的事件的监听器数组中移除指定的 listener。 const callbackA = () => { console.log(‘A‘); myEmitter.removeListener(‘event‘, callbackB); }; const callbackB = () => { console.log(‘B‘); }; myEmitter.on(‘event‘, callbackA); myEmitter.on(‘event‘, callbackB); myEmitter.emit(‘event‘); myEmitter.emit(‘event‘);