gpt4 book ai didi

node.js - Node.js 中的事件和事件发射器

转载 作者:搜寻专家 更新时间:2023-10-31 22:49:08 26 4
gpt4 key购买 nike

所以我附加了两个事件,如果有人尖叫,它们会被同步调用,为什么这样呢?

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');

订单:尖叫

鲍勃在尖叫

最佳答案

因为在 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');

输出:尖叫//只有一次。

关于node.js - Node.js 中的事件和事件发射器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51490893/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com