Не останавливайте запрос на тайм-аут в RxJS - PullRequest
1 голос
/ 28 июня 2019

Я хочу реализовать функцию, которая возвращает Observable, отправляет запрос на сервер и ждет ответа в течение некоторого времени.Если в течение этого времени ответ не получен, Observable выдает значение из некоторой переменной / кэша.Но после получения ответа Observable испускается снова, но с реальным ответом.Если ответ был получен вовремя, Observable испускает только одно значение (реальный ответ).

Сначала я попытался использовать оператор timeout, но проблема в том, что этот оператор прерывает запрос и выдает исключение.Прямо сейчас мое решение выглядит ужасно.Могу ли я сделать это в одной трубе?

Мой текущий код:

`let subject = new Subject ();пусть закончено = ложно;

let request = this.http.post(`/url`)
  .pipe(
    tap(() => {
      finished = true;
    }),
  ).subscribe((x) => subject.next(x));


timer(3000).subscribe(() => {
  if (!finished) {
      console.log("FROM BUFFER");
      subject.next(bufferedItem);
    }
  }
});

return subject;

1 Ответ

0 голосов
/ 28 июня 2019

1) Если настроенный вами тайм-аут, вы можете иметь тайм-аут внутри самой трубы:

  pipe(
        timeout(2500),
        catchError(error => of(`Request timed out after: ${duration}`))
      )

2) Если время ожидания шлюза, вы можете вернуть ответ из вашего блока catchError или retry в зависимости от условий

3) Таймер будет запускаться каждые 3 секунды в соответствии с вашим кодом и событием отправки, вместо этого используйте тайм-аут внутри канала

4) Подписаться на фактический ответ после его получения и, наконец, отправить ответ.

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