Javascript 如何删除作为闭包的事件侦听器?
我有一个作为闭包的事件处理程序Javascript 如何删除作为闭包的事件侦听器?,javascript,node.js,coffeescript,Javascript,Node.js,Coffeescript,我有一个作为闭包的事件处理程序 halt = (socket, room) -> (sid) -> if sid is socket.id socket.broadcast.to(room).emit 'halt' 每次套接字连接时,我都将此侦听器连接到全局发射器。当套接字断开连接时,我想删除侦听器 @io.on 'connection', (socket) -> haltFn = halt socket, 'kitchen' emitter.
halt = (socket, room) ->
(sid) ->
if sid is socket.id
socket.broadcast.to(room).emit 'halt'
每次套接字连接时,我都将此侦听器连接到全局发射器。当套接字断开连接时,我想删除侦听器
@io.on 'connection', (socket) ->
haltFn = halt socket, 'kitchen'
emitter.on 'halt', haltFn
socket.on 'disconnect', ->
emitter.removeListener 'halt', haltFn
从日志中,我可以看到,
halt
中的函数被调用的次数与连接发生的次数相同,即使在一些断开连接之后。我如何才能正确地删除侦听器?您所说的“即使在断开一些连接之后”是什么意思?这不是它应该做的吗,只删除它自己连接的haltFn
,让其余的保持不变?示例流:user1连接,user2连接,user1断开连接,user1连接,发出暂停事件,haltFn
运行3次,这很奇怪。halt
事件向哪三个套接字发出,您是否记录了它们?它们真的是user1和user2的封闭套接字吗?