【发布时间】:2022-01-21 14:17:56
【问题描述】:
我尝试了以下 NodeJs 示例:
const EventEmitter = require('events');
var eventEmitter = new EventEmitter();
var fun1 = (msg) => {
console.log("Message from fun1: " + msg);
};
var fun2 = (msg) => {
console.log("Message from fun2: " + msg);
};
eventEmitter.on('myEvent', fun1);
eventEmitter.on('myEvent', fun1);
eventEmitter.on('myEvent', fun2);
eventEmitter.removeListener('myEvent', fun1);
eventEmitter.emit('myEvent', "Event occurred");
console.log(eventEmitter.listenerCount('myEvent'));
eventEmitter.removeAllListeners('myEvent');
console.log(eventEmitter.listenerCount('myEvent'));
eventEmitter.emit('myEvent', "Event occurred");
输出是:
来自 fun1 的消息:事件发生
来自 fun2 的消息:事件发生
2
0
请帮助我理解输出,因为根据我的预期,不应该打印“来自 fun2 的消息:事件发生”行,因为我在它之前调用了 removeAllListeners。并且,事件发射器函数被同步调用。另外,如果事件发射器函数真的是以同步方式执行的,为什么所有控制台日志都在最后打印出来?
【问题讨论】:
标签: node.js asynchronous synchronous eventemitter order-of-execution