javascript - socket.io 删除特定的监听器

标签 javascript sockets socket.io

我正在使用 Socket.io v0.9.16 和 Chrome 34

我正在尝试删除特定的监听器,或取消订阅特定的订阅

像这样:

socket.on('testComplete',function(data){
    console.log('test complete',data);
}); 

function emitTest(){
    console.log('emitting test');
    socket.emit('test','first emit');
}

function removeListener(){
    socket.removeListener('testComplete');
}

如果我调用 emitTest 函数,然后调用 removeListener 函数,我仍然会在调用 'test complete' 消息时看到消息 emitTest 再次。如果套接字功能有效,则应该删除监听器。

我正在寻找一种方法来删除实际有效的特定监听器。

This answer说 removeListener 不起作用。

这样做有什么缺点吗:

socket.removeListener=function(name){
        if(socket.$events.hasOwnProperty(name)){
            delete socket.$events[name];
        }
    };

我将答案标记为正确,但我在我的代码中使用了上面的答案,因为它更适合我的设计。

最佳答案

//To unsubscribe all listeners of an event
socket.off('event-name');

//to unsubscribe a certain listener
socket.off('event-name', listener);

请注意,socket.offsocket.removeListenersocket.removeAllListenerssocket.removeEventListener 是同义词.

这是在 socket.io v1.4.3 上测试的

关于javascript - socket.io 删除特定的监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23092624/

相关文章:

javascript - 数组中的过滤器的行为不符合 0 的预期。 JavaScript

javascript - 将 mustache 模板嵌入到另一个模板中

javascript - 自定义控件的 HTMLDocument getElementById 返回 null,为什么,是否有不同的方法来访问它?

java套接字写入然后从套接字读取

javascript - 在socket io中的事件回调函数中获取事件名称

node.js - 将 Socket.io 与 ReactJS 和 ExpressJS 一起使用时浏览器挂起

javascript - 用单选按钮排列键

C# 套接字服务器 - 部署、启动、停止

Java:处理具有多个连接的套接字?

django - 错误 : Cannot find module 'socket.io/node_modules/redis' on Mac