Наблюдаемые угловые Rxjs больше не будут срабатывать после отписки - PullRequest
0 голосов
/ 01 июня 2018

Я слушаю сокет с Observable и подписываюсь на него в одном из моих компонентов.Если я не откажусь от его подписки в ngOnDestroy, когда я снова зайду на этот компонент, он сработает N раз (N - это число раз, когда я переключаюсь обратно на этот компонент), но если я откажусь от подписки на ngOnDestroy, тогда он будетслушайте первый раз, когда я иду к этому компоненту, и когда я иду к другому компоненту и возвращаюсь назад, он не сработает.

//in socket service
updateOrder() {
  if (!this.socket.connected)
    this.socket.connect();
  let observable = new Observable < any > (observer => {
    this.socket.on('test', (data) => {
      observer.next(data); //going into here
    });
    return () => {
      this.socket.disconnect();
    };
  })
  return observable;
}

В конструкторе компонента прослушивания

this.orderSubscriber = this.socketService.updateOrder().subscribe(data => {
  console.log('socket fired', data);
})

ngOnDestroy() {
  this.orderSubscriber.unsubscribe();
}

1 Ответ

0 голосов
/ 04 июня 2018

Отвечая на мой собственный вопрос.Использование socket.removeListener('test') вместо socket.disconnect() решено.Спасибо, люди, которые привели меня к проблеме.

//in socket service
updateOrder() {
  let observable = new Observable < any > (observer => {
    this.socket.on('test', (data) => {
      observer.next(data);
    });
    return () => {
      this.socket.removeListener('test')
    };
  })
  return observable;
}
...