如the docs说,emitter.emit(event[, arg1][, arg2][, ...])
Synchronously calls each of the listeners registered for event, in the order they were registered, passing the supplied arguments to each.
但通过这个简单的例子:
router.get('/messages', function(req, res, next) {
var addMessageListener = function(res){
messageBus.once('message', function(data){
res.json(data);
})
}
addMessageListener(res);
});
router.get('/push', function(req, res, next) {
messageBus.emit('message', { awesome : 'event'})
res.status(200).end()
});
当消息事件发出并且有两个请求正在监听时,只有其中一个正确监听该事件并执行其回调。
有没有办法同时向所有监听器发出事件?
编辑:
我不需要监听器同时执行,我只需要执行所有监听器
编辑2:
经过更多测试,当我创建多个监听器时,它们成功监听发射器(使用 messageBus.listenerCount('message')
进行调试),但有近 20 秒的延迟。
当只有一个正在监听而第二个在这段延迟期间时,如果我调用 /push
它会成功发送给监听的一个,而另一个则立即开始监听。
最佳答案
自从您使用 once()函数来添加监听器, Node 最多会调用指定的监听器一次,并且在第一次调用后它将删除该监听器。如果您希望每次发出 message
事件时都会调用监听器,则需要使用 on()函数而不是 once()
。
关于javascript - 有没有办法使用 Node.js EventEmitter 同时向所有监听器发出结束事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35281097/