Как я могу сделать еще один запрос в catchError? - PullRequest
1 голос
/ 16 мая 2019
  this.service.login().pipe(
      catchError((error: HttpErrorResponse, responseObservable: Observable<boolean>) => {
        if (error.status === 400) {
          return this.service.doSomethingElse.pipe(map(() => throwError(error)));
        } else {
          return throwError(error);
        }
      }),
    ).subscribe(

Ответ от этого всегда 200. Он не выдаст ошибку, когда код состояния 400 и вернется после выполнения другого запроса. Любая помощь будет великолепна.

Ответы [ 2 ]

3 голосов
/ 16 мая 2019

С map() вы отображаете значения от this.service.doSomethingElse Наблюдаемые до throwError(error) Наблюдаемые, поэтому вы получаете поток потоков.

Вы должны сгладить его с помощью mergeMap или другого оператора сплющивания.Нравится:

return this.service.doSomethingElse.pipe(mergeMap(() => throwError(error)));
0 голосов
/ 16 мая 2019

Попробуйте это:

this.service.login()
    .subscribe((res: any) => {
     }, error => {
       if (error.status === 400) {
          return this.service.doSomethingElse.pipe(map(() => throwError(error)));
       } else {
           return throwError(error);
       }
 })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...