У меня есть следующий код:
const reconnectorAfterPingPongFailed$ = Observable.of('timeout').delay(5000).takeUntil(this.serviceAlive$);
reconnectorAfterPingPongFailed$
.race(this.pingPong$)
.take(1)
.repeat()
.takeUntil(this.serviceAlive$)
.do(() => console.log("[ping-pong]:","repeated"))
.subscribe((data: any) => {
// some code
});
что я ожидаю от этого кода?
- Каждые N секунд мы получаем от сервера сообщение "pong", которое использовалось для создания этого .pingPong $ .next ("pong")
- Это относится к race (), где, если есть pong, мы получаем команду «pong» в подписке или «timeout», если «pong» не существует для задержки более 5000 секунд (событие приходит от
reconnectorAfterPingPongFailed$
)
- Я хотел бы обработать подписку, только если мой сервис работает, скажем, пока я вхожу в систему.
- Поэтому, когда я выхожу из системы, я делаю
.next()
и .complete()
:
- При первом выходе из системы я не вижу сообщения console.log от
.do()
- Когда я снова захожу, эта тема воссоздается снова.
serviceAlive$: Subject<void> = new Subject<void>();
- И когда я снова вышел из системы, кажется, что этот код
.do(() => console.log("[ping-pong]:","repeated"))
все еще работает