angular - Hur kan jag göra en annan begäran inom catchError?


  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(

Svaret från detta är alltid 200, Det kommer inte att ge ett fel när statuskoden är 400 och returnera från att göra den andra förfrågan. All hjälp skulle vara fantastisk.

Svar #1

Med map() mappar du värden från this.service.doSomethingElse Observable till throwError(error) Observable, så du får en ström av strömmar.

Du bör platta till det med mergeMap eller annan plattningsoperator. Som:

return this.service.doSomethingElse.pipe(mergeMap(() => throwError(error)));

Svar #2

Prova detta:

this.service.login()
    .subscribe((res: any) => {
     }, error => {
       if (error.status === 400) {
          return this.service.doSomethingElse.pipe(map(() => throwError(error)));
       } else {
           return throwError(error);
       }
 })