Есть ли способ получить код состояния HTTP в angular с помощью повторных попыток с использованием операторов rx js? - PullRequest
1 голос
/ 10 января 2020
getRequest(url : string,retryCount = 2) {
    return new Observable(response => {
     return this.http.get<any>(url)
     .pipe(
        retryWhen((error) => {
          return error.pipe(
            concatMap((e, i) => {
              if (i >= retryCount) {
                return throwError({ ...e, retryCount });
              }
              return of(e).pipe(delay(2000));
            })
          );
        })
      )
      .subscribe(data => {
        response.next(data);
        }, (err: HttpErrorResponse) => {
              response.next() //expected 404 ,500 and so on
          });
      });
  }

getRequest(https://jsonplaceholder.typicode.com/postss).subscribe((data: any) => {
      console.log(data);
      }); 

Выше кода должны возвращать коды ошибок при ошибке. вышеуказанный URL не существует и должен получить 404 при 2 повторных попытках. какие изменения необходимы для получения этих кодов ошибок?

1 Ответ

0 голосов
/ 10 января 2020

Вы можете получить код состояния в операторе retryWhen следующим образом:

getRequest(url: string, retryCount = 2) {
  return this.http.get(url).pipe(
    retryWhen(errors => errors.pipe(
      mergeMap((error, i) => i < retryCount ? timer(2000) : throwError(error)
      )
    ))
  );
}

getRequest('api').subscribe(
  () => { }, // success
  error => console.log(error.status)
);

В приведенном выше коде в операторе retryWhen мы улавливаем ошибку и повторяем запрос с 2 секундами задержки 2 времена, как вы делаете.

Затем мы выдаем ошибку и разбираемся с ней внутри функции ошибки вызова подписки.

Мы можем получить статус, извлекая свойство status из входящей ошибки.

Надеюсь, я ответил на ваш вопрос:)

...