Ik gebruik Socket.io v0.9.16 en
Chroom 34
Ik probeer een specifieke luisteraar te verwijderen of me af te melden voor een specifiek abonnement
Zoiets:
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');
}
Als ik de functie emitTest
en vervolgens de functie removeListener
aanroep, zie ik nog steeds het bericht 'test complete'
wanneer ik emitTest
opnieuw. De luisteraar had verwijderd moeten zijn, als de socket-functie zelfs maar werkt.
Ik ben op zoek naar een manier om een specifiekeluisteraar te verwijderen die echt werkt.
Dit antwoordzegt dat removeListener niet werkt .
Is er een nadeel om dit gewoon te doen:
socket.removeListener=function(name){
if(socket.$events.hasOwnProperty(name)){
delete socket.$events[name];
}
};
Ik heb een antwoord als correct gemarkeerd, maar ik gebruik het bovenstaande in mijn code omdat het beter past bij mijn ontwerp.
Antwoord 1, autoriteit 100%
//To unsubscribe all listeners of an event
socket.off('event-name');
//to unsubscribe a certain listener
socket.off('event-name', listener);
Merk op dat socket.off
, socket.removeListener
, socket.removeAllListeners
, socket.removeEventListener
synoniemen zijn .
Dit is getest op socket.io v1.4.3
Antwoord 2, autoriteit 43%
Je moet de listener-functie doorgeven aan 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);
}
Antwoord 3
Als je geen functieaanroep gebruikt, of zelfs als je het volgende voor mij hebt gewerkt:
getEventListeners(socket)['testComplete'][0].remove()
Je zou zelfs door alle aangesloten luisteraars kunnen bladeren en ze kunnen verwijderen.
for(var prop in getEventListeners(websocket))
{
$(getEventListeners(websocket)[prop]).each(function() { this.remove()})
}
Het is de moeite waard erop te wijzen dat hoewel dit werkt, het momenteel alleen in Chrome werkt.