Я пытаюсь реализовать службу, которая обеспечивает наблюдаемое, если приложение подключено к моему серверу или нет, поэтому, когда браузер в сети, мы проверяем сервер с таймером. Вот код:
public get $connected(): Observable<boolean> {
return this.hasInternetConnection
.asObservable()
.pipe(
distinctUntilChanged(),
flatMap((connected: boolean) => {
if (!connected) {
return of(connected);
} else {
return timer(5000)
.pipe(
map(() => {
var success = Math.random() > 0.5;
console.log('PING: ' + success);
return success;
})
);
}
})
);
}
hasInternetConnection
- это просто BehaviorSubject, привязанный к событиям окна online
и offline
, таймер имитирует пинг на моем сервере API.
Проблема в том, что моя подписка $connected
улавливает только первое значение из наблюдаемого таймера, а затем не работает. После того, как hasInternetConnection
тема меняется на false
и обратно на true
, моя подписка снова получает первое значение, а затем ничего. Вот что я вижу в консоли:
PING: true
subscription tap
PING: true
PING: false
PING: true
...
Как я могу это исправить? Спасибо!