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的封闭套接字吗?