Angular HttpClient с таймаутом кажется ничего не делает - PullRequest
0 голосов
/ 07 ноября 2018

Вот как я делаю свои запросы (и это работает).

this.http
  .get(url, options)
  .pipe(retryWhen((errors) => this.retry(errors, { delay: retryDelay, take: retryTake })))
  .toPromise()
  .catch((ex) => {
    this.exception(ex);
    throw ex;
  });

Теперь у меня есть конкретный адрес, на ответ которого уходит слишком много времени, и из-за этого я получаю 504.

Так что я пытаюсь работать с timeout, но, похоже, ничего не меняется, как в Chrome, он ждет только 1 минуту макс. Вот код:

this.http
  .get(`${this.host}/${action}${query}`, options)
  .pipe(timeout(300000), (e) => {
    console.log(e);
    return of(null);
  })
  .pipe(retryWhen((errors) => this.retry(errors, { delay: retryDelay, take: retryTake })))
  .toPromise()
  .catch((ex) => {
    this.exception(ex);
    throw ex;
  });

Что я могу делать не так?

Работа с:

Угловой 6.1.0

1 Ответ

0 голосов
/ 07 ноября 2018

Вы можете попробовать использовать takeUntil метод вместо тайм-аута

import { timer } from 'rxjs';
import { takeUntil } from 'rxjs/operators';

//after 30 seconds, stop retrying
const timer$ = timer(30000);

this.http
  .get(url, options)
  .pipe(retryWhen((errors) => this.retry(errors, { delay: retryDelay, take: retryTake })),
        takeUntil(timer$))
  .toPromise()
  .catch((ex) => {
    this.exception(ex);
    throw ex;
  });
...