Supponiamo che ci siano oggetti che fanno abbonamenti a un server socket in questo modo:Come annullare l'iscrizione a un abbonamento socket.io?
socket.on('news', obj.socketEvent)
Questi oggetti hanno una vita breve e sono spesso creati, generando molti abbonamenti. Ciò sembra come una perdita di memoria e una situazione incline errore che sarebbe intuitivamente essere impedita in questo modo:
socket.off('news', obj.socketEvent)
prima che l'oggetto viene eliminato, ma purtroppo, non esiste un metodo off
nella presa. C'è un altro metodo pensato per questo?
Modifica: non ho trovato risposta Sto assegnando un metodo vuoto per sovrascrivere il metodo wrapper per il gestore di eventi originale, ne segue un esempio.
var _blank = function(){};
var cbProxy = function(){
obj.socketEvent.apply(obj, arguments)
};
var cbProxyProxy = function(){
cbProxy.apply ({}, arguments)
}
socket.on('news', cbProxyProxy);
// ...and to unsubscribe
cbProxy = _blank;
Sembra funzionare, l'evento scompare da SocketNamespace anche se devo ancora effettuare test approfonditi su questa parte. Inoltre avevi ragione sulla soluzione proxy, quindi è aggiornato per il suo umore –
Questo non funziona? CbProxy WTF è? –
Che cosa non funziona? 'cbProxy' era un metodo di callback definito dall'OP. –