用啥代替 socket.removeAllListeners();在客户端
Posted
技术标签:
【中文标题】用啥代替 socket.removeAllListeners();在客户端【英文标题】:What to use instead of socket.removeAllListeners(); on the client side用什么代替 socket.removeAllListeners();在客户端 【发布时间】:2014-01-27 06:54:12 【问题描述】:我遇到了与Improve this AngularJS factory to use with socket.io 类似的问题,但接受的答案似乎使用了一个不再存在的函数,所以如果我在 angular.js 控制器中的客户端可以替代socket.removeAllListeners();
需要删除一个监听器?我正在使用 socket.io v .9.16
【问题讨论】:
【参考方案1】:socket.removeAllListeners()
还在。之所以不能调用,是因为真正的socket是这个:var socket = io.connect()
。
以下代码中的“socket”是angular工厂返回的一个包装器,只有on
和emit
两种方法。
$scope.$on('$destroy', function (event)
socket.removeAllListeners();
// or something like
// socket.removeListener(this);
);
你可以做的是像这样向socket
工厂添加一个新的getSocket
方法:
app.factory('socket', function ($rootScope)
var socket = io.connect();
return
on: function (eventName, callback)
// ...
,
emit: function (eventName, data, callback)
// ...
,
getSocket: function()
return socket;
;
);
然后你可以这样做:
$scope.$on('$destroy', function (event)
socket.getSocket().removeAllListeners();
// or something like
// socket.getSocket().removeListener(this);
);
【讨论】:
非常感谢,我仍然习惯于使用包装函数。【参考方案2】:如果您想将代码保留在服务本身中,您实际上可以将其添加到您要返回的对象中:
removeAllListeners: function()
socket.removeAllListeners();
然后在您的控制器中,您只需调用 socket.removeAllListeners();
【讨论】:
以上是关于用啥代替 socket.removeAllListeners();在客户端的主要内容,如果未能解决你的问题,请参考以下文章
Android Gradle - 用啥代替 compileOnly?
Swift 4:NSFilenamesPboardType 不可用。用啥代替 registerForDraggedTypes?
用啥代替 socket.removeAllListeners();在客户端
JwtAccessTokenConverter 和 JwtTokenStore 被贬低了。可以用啥代替?