【发布时间】:2017-11-18 03:16:03
【问题描述】:
我的问题是是否可以限制特定事件的绑定侦听器可能性?例如我有一个监听器:
//In server
socket.emit('something', { message: 'Hello World!' });
//At client
socket.on('something', (data) => {
console.log(data.message);
});
//Output in console
Hello World!
但是,如果我在代码中的其他位置复制该 sn-p,我会将 2 个相同的侦听器绑定到一个事件,因此我会得到 2 个我只想要一个的控制台日志。
//In server
socket.emit('something', { message: 'Hello World!' });
//At client
socket.on('something', (data) => {
console.log(data.message);
});
socket.on('something', (data) => {
console.log(data.message);
});
//Output in console
Hello World!
Hello World!
我知道对于单个事件的不同操作可能有多个侦听器,但是当我在某些框架中使用 socket.io 并在组件之间切换(我在组件的构造函数中绑定)时,框架只是绑定相同的每次我在组件之间切换时监听相同的事件。所以结果如上。
所以我的问题是:
- 是否可以检查某些事件是否已经有监听器并忽略第二个绑定?
- 或者,如果有一些 socket.io 配置设置允许每个事件只绑定一个侦听器,并且当您绑定一个新的侦听器时,它会覆盖旧的侦听器?
- 或者只是一些关于如何处理这种情况的良好做法?
【问题讨论】:
-
当你改变组件时停止监听,使用:socket.removeListener('something', something);更多信息:stackoverflow.com/questions/23092624/…
-
谢谢,我已经在 angular2 中编写了一个类似 service 的接口,并将其发布在这里作为答案,我将您的介词与 socket.off 函数一起使用(据我所知,这与 socket.removeListener 相同) )
标签: javascript sockets events websocket socket.io