socket.io Removing specific listener

前端 未结 3 1771
日久生厌
日久生厌 2020-11-27 16:14

I\'m using Socket.io v0.9.16 and Chrome 34

I\'m trying to remove a specific listener, or unsubscribe from a specific subscription

Something like this:

<
相关标签:
3条回答
  • 2020-11-27 16:59
    //To unsubscribe all listeners of an event
    socket.off('event-name');
    
    //to unsubscribe a certain listener
    socket.off('event-name', listener);
    

    Note that socket.off, socket.removeListener, socket.removeAllListeners, socket.removeEventListener are synonyms.

    This is tested on socket.io v1.4.3

    0 讨论(0)
  • 2020-11-27 17:10

    You need to pass in the listener function to removeListener.

    function testFun(data){
        console.log('test complete',data);
    }
    
    socket.on('testComplete', testFun); 
    
    function emitTest(){
        console.log('emitting test');
        socket.emit('test','first emit');
    }
    
    function removeListener(){
        socket.removeListener('testComplete', testFun);
    }
    
    0 讨论(0)
  • 2020-11-27 17:12

    If you're not using a function call, or even if you are the following worked for me:

    getEventListeners(socket)['testComplete'][0].remove()
    

    You could even loop through all the listeners attached and remove them.

    for(var prop in getEventListeners(websocket))
    {
        $(getEventListeners(websocket)[prop]).each(function() { this.remove()})
    }
    

    It's worth pointing out that although this works, it only works in Chrome at the moment.

    0 讨论(0)
提交回复
热议问题