В одном из моих угловых проектов я реализовал http-поллер с использованием таймера rxjs.всякий раз, когда HTTP-ответ задерживается больше, чем интервал опроса, ожидающий запрос отменяется.
Используемая логика демонстрируется на https://rxviz.com/v/VOKjA9Mo. Здесь ожидаемый результат от 1 до 5. Но иногда кажется, чтоНаблюдаемая mockApiCall отменяется случайным образом (когда время отклика составляет 800 миллисекунд).
let n = 0
function mockApiCall(){
// delays 400 or 800 millis randomly
n++
return Rx.Observable.of([n])
.delay(400 + Math.round(Math.random()) * 400)
}
Rx.Observable
.timer(500, 500)
.switchMap( _=>mockApiCall()).take(5)
Как избежать отмены внутренней наблюдаемой, используемой в этом таймере.т.е. таймер должен ждать до завершения вызова API.