1

我正在使用 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();
}

4

1 回答 1

1

回答我自己的问题。使用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;
}

于 2018-06-04T08:32:59.300 回答