作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 socket.io-client
在我的 Angular 8 应用程序中。
我正在使用如下所示的服务:
private socket: SocketIOClient.Socket;
private _alertsObservable: Observable<Alert> = Observable.create();
constructor(channelService : MyChannelService) {
this.socket = io(environment.socketServer);
}
refreshAlertsObservable() {
console.log('This prints once when called')'
this.socket.removeAllListeners();
this._alertsObservable = Observable.create(observer => {
channelService.channelArray.forEach(
channel => {
this.socket.on(channel.number.toString(), alert => {
console.log('This prints multiple times')'
observer.next(alert);
});
}
)
});
}
refreshAlertsObservable()
每当我检测到对
channelService
进行更改时.
this.socket.on()...
,似乎它为
channel.number
添加了多个监听器,据我所知,这是设计使然)。
this.socket.removeAllListeners();
预先。但是,它似乎不起作用,因为一旦发出消息,“
This prints multiple times
”就会以倍数打印。
on()
与
addEventListener()
并且行为是相同的。
最佳答案
RemoveAllListeners 期望您正在收听的事件名称数组。尝试维护在数组中创建的监听器并将其传递给函数。
你可以试试下面的方法:
socket.removeAllListeners([eventName])
socket.getSocket().removeAllListeners();
关于angular - removeAllListeners() 根本不删除监听器? (Socket.IO),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61252751/
我遇到了与 Improve this AngularJS factory to use with socket.io 类似的问题但接受的答案似乎使用了一个不再存在的函数,所以如果我需要删除监听器,在
我正在使用 socket.io-client在我的 Angular 8 应用程序中。 我正在使用如下所示的服务: private socket: SocketIOClient.Socket; priv
我是一名优秀的程序员,十分优秀!