Я слушаю сокет с помощью 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();
}
socket.connect
внутриupdateOrder
. Похоже, это делается где-то еще, и когда вы вызываетеsocket.disconnect
, он больше никогда не выдает значения. - person Bunyamin Coskuner   schedule 01.06.2018this.socket.disconnect();
, то есть вы отключаете сокет при отмене подписки, поэтому в следующий раз, когда вы придете, вам нужно снова открыть соединение - person Pranay Rana   schedule 01.06.2018if (!this.socket.connected) this.socket.connect();
в началеupdateOrder
, и теперь компонент срабатывает только один раз, как и предполагалось, ноobserver.next(data);
внутриupdateOrder
вызывается так же, как и раньше. Это нормально? - person Bibek Gurung   schedule 04.06.2018test
только один раз с сервера. - person Bibek Gurung   schedule 04.06.2018