gpt4 book ai didi

node.js - 本地 eventEmitter 监听全局 eventEmitter

转载 作者:搜寻专家 更新时间:2023-11-01 00:08:20 24 4
gpt4 key购买 nike

我差点把问题标题写成 - Communicating between eventEmitters

我有一个全局范围内的 node.js 模块 (X)(它使用 eventEmitter)。然后我有每个套接字本地的代码(用户连接)。

现在我在全局变量 G={'X':X} 上携带 X,这样套接字就可以像这样访问 X:

G.X.on('someEvent',doSomething);

这是愚蠢的!现在每次我启动我的服务器时,它似乎都运行良好(我收到事件),但是如果我刷新页面并发出一个事件,我会得到它两次。如果我再次刷新页面,我会收到 3 次事件。

我认为我正在将监听器绑定(bind)到同一个全局 eventEmitter。

我如何制作一个单独的本地 eventListener 来监听全局 eventEmiter 的发出?

我知道如何设置 eventEmiter:

var events = require('events');
var ee = new events.EventEmitter();

ee.on('someEvent',function(){console.log('hello');});

但它没有捕捉到另一个...的事件

我也尝试过使用 eventEmitter 复制模块

var ee = G.X;
ee.on('someEvent',function() { console.log('hello'); });

但它仍然接收多个事件。

hello
hello
hello

最佳答案

很久以前就有人问过这个问题,但无论如何,这是我的答案,因为目前还没有答案。

监听套接字对象的“关闭”事件,然后移除对全局的回调。所以它看起来像:

X.addListener("someEvent", callback);

X.on("someEvent", function(socket){
socket.on("close", function(){
X.removeListener("someEvent", callback);
});
});

关于node.js - 本地 eventEmitter 监听全局 eventEmitter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23209072/

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