Как реализовать http-поллер с использованием таймера rxjs - PullRequest
0 голосов
/ 28 мая 2018

В одном из моих угловых проектов я реализовал 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.

1 Ответ

0 голосов
/ 28 мая 2018

Похоже, вы ищете exhaustMap вместо switchMap (я немного запутался в вашем описании):

Проецирует каждое значение источникак наблюдаемой, которая объединяется с выходной наблюдаемой, только если завершена предыдущая прогнозируемая наблюдаемая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...