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
を再度呼び出したときのメッセージ。ソケット機能が機能する場合は、リスナーを削除する必要があります。
実際に動作するspecificリスナーを削除する方法を探しています。
この回答 はremoveListenerが機能しないことを示しています。
これを行うだけの欠点はありますか?
socket.removeListener=function(name){
if(socket.$events.hasOwnProperty(name)){
delete socket.$events[name];
}
};
答えを正解としてマークしましたが、デザインでうまく機能するため、上記のコードで使用しています。
リスナー関数を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);
}
//To unsubscribe all listeners of an event
socket.off('event-name');
//to unsubscribe a certain listener
socket.off('event-name', listener);
ご了承ください socket.off
、socket.removeListener
、socket.removeAllListeners
、socket.removeEventListener
は同義語です。
これはsocket.io v1.4.3でテストされています
関数呼び出しを使用していない場合、またはあなたが私のために働いていた場合でも:
getEventListeners(socket)['testComplete'][0].remove()
接続されているすべてのリスナーをループして削除することもできます。
for(var prop in getEventListeners(websocket))
{
$(getEventListeners(websocket)[prop]).each(function() { this.remove()})
}
これは機能しますが、現時点ではChromeでのみ機能します。