Я использую 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()
, и поведение такое же.
Спасибо