const events = require('events');
const eventEmitter = new events.EventEmitter();
eventEmitter.on('scream', function() {
console.log("Screaming");
});
eventEmitter.on('scream', function(name) {
console.log(name+" is screaming");
});
eventEmitter.emit('scream', 'Bob');
O / P: 尖叫
鲍勃在尖叫
答案 0 :(得分:1)
因为Event loop从事件队列中获取事件,并将其逐个发送到调用堆栈。
事件队列是FIFO(先进先出)
答案 1 :(得分:1)
由于在nodejs中,事件循环是单线程的,并且一次选择一个事件并独立处理这些事件。
在您的情况下,有两个具有相同名称的事件处理程序,因此,当事件循环获取eventEmitter.emit('scream', 'Bob')
时,它将发送特定的事件处理程序。
当第一个事件处理程序完成后,现在转到第二个处理程序,因为它具有相同的名称。
它遵循FIFO,但是如果您使用emitter.prependListener(eventName, listener)
,则它将首先执行FIFO。
您应该知道,如果您只想打一次电话,则应该使用eventEmitter.once('scream')
它只会被打一次电话。
eventEmitter.once('scream', function() {
console.log("Screaming");
});
eventEmitter.emit('scream', 'Bob');
eventEmitter.emit('scream', 'Bob');
eventEmitter.emit('scream', 'Bob');
Output: Screaming // Only one time.