Socket.io socket.off() 没有按预期工作
Posted
技术标签:
【中文标题】Socket.io socket.off() 没有按预期工作【英文标题】:Socket.io socket.off() not working as expected 【发布时间】:2020-05-24 03:51:29 【问题描述】:我试图从套接字中删除所有事件侦听器到特定事件,并在 StackOveflow 上找到了这个 accepted answer。
我遵循了答案,并尝试了以下操作:socket.off('listenerName')
to remove all listeners from the listenerName
event,但是这段代码给了我一个错误:
(node:27706) UnhandledPromiseRejectionWarning: TypeError [ERR_INVALID_ARG_TYPE]: The "listener" argument must be of type Function. Received type undefined
我正在使用socket.io
的最新版本 (2.3.0)。所以看起来,socket.off()
方法至少需要 2 个参数才能工作,我必须明确告诉它我要删除哪个函数。我尝试搜索socket.io
的文档以找到该函数的定义,但我发现socket
继承了Emiter
的所有方法,包括off()
方法。
有谁知道socket.io
中是否有一个函数,我可以使用它从特定事件中删除所有侦听器,而无需明确提供对最初添加函数的引用?
【问题讨论】:
我不知道您是如何从引用socket.off('event_name')
和 socket.off('event_name', listener)
到您的代码 socket.off('listenerName')
的答案中得到的。尝试更仔细地阅读。
我认为你所说的只是一个命名问题,在下面一行中,你会怎么称呼event_name
? socket.on('disconnect', function() );
?因为我会调用listenerName
断开连接字符串。通过使用 socket.io 2.3.0 执行socket.off('disconnect')
,我得到了上述错误。因此,如果我弄错了,并且event_name
与我称之为listenerName
的不同,请原谅我,我会更正我的答案。但如果不是,也许你应该在投票和评论之前更仔细地阅读。
【参考方案1】:
我在另一个question找到了解决方案。
我已经设法从特定事件中删除了所有事件侦听器:
socket.removeAllListeners("news");
【讨论】:
以上是关于Socket.io socket.off() 没有按预期工作的主要内容,如果未能解决你的问题,请参考以下文章
多个侦听器和 removeListener 删除所有内容 Socket.io
io.sockets.socket(socket_id).emit() - 没有方法'socket'