【发布时间】:2020-07-29 20:10:38
【问题描述】:
我在我的 Angular 8 应用程序中使用 socket.io-client。
我正在使用如下所示的服务:
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);
});
}
)
});
}
每当我检测到对channelService 进行更改时,我都会在refreshAlertsObservable() 上运行。
每当我执行this.socket.on()... 时,似乎它会向channel.number 添加多个侦听器,据我所知,这是设计使然)。
这就是我事先运行this.socket.removeAllListeners(); 的原因。但是,它似乎不起作用,因为一旦发出消息,“This prints multiple times”就会不断打印多个。
我还尝试用addEventListener() 替换on() 并且行为是相同的。
谢谢
【问题讨论】:
-
您有任何小型 github 存储库来重现您的问题吗?