可以观察到的Angular Rxjs在取消订阅

时间:2018-06-01 06:26:35

标签: angular socket.io rxjs6

我正在使用Observable监听套接字并在我的一个组件中订阅它。如果我没有在ngOnDestroy中取消订阅,当我再次访问该组件时,它会触发N次(N是我切换回该组件的次数)但如果我在{{1}中取消订阅它那么它会在我第一次去那个组件的时候听,当我去其他组件并返回时,它就不会开火了。

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);
})

1 个答案:

答案 0 :(得分:1)

回答我自己的问题。使用socket.removeListener('test')而非socket.disconnect()已解决。谢谢指导我解决问题的人。

&#13;
&#13;
//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;
}
&#13;
&#13;
&#13;