gpt4 book ai didi

angular - removeAllListeners() 根本不删除监听器? (Socket.IO)

转载 作者:行者123 更新时间:2023-12-03 20:54:54 25 4
gpt4 key购买 nike

我正在使用 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 documentation

还有其他类似的方法可用,例如 off、removeListener 等,您可以尝试一下。

- -编辑 - -

或者,如果代码中的套接字实例“socket”是一个包装器, Angular 返回可能只有 on 和发射函数,请尝试打印对象并使用以下方法调用它:
socket.getSocket().removeAllListeners();

关于angular - removeAllListeners() 根本不删除监听器? (Socket.IO),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61252751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com