Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何在catchError内发出另一个请求? this.service.login()管道( catchError((错误:HttpErrorResponse,responseObservable:Observable)=>{ 如果(error.status==400){ 返回这个.service.doSomethingElse.pipe(map(()=>throwError(error)); }否则{ 返回投掷器(错误); } }), ).订阅(_Angular_Typescript_Rxjs - Fatal编程技术网

Angular 如何在catchError内发出另一个请求? this.service.login()管道( catchError((错误:HttpErrorResponse,responseObservable:Observable)=>{ 如果(error.status==400){ 返回这个.service.doSomethingElse.pipe(map(()=>throwError(error)); }否则{ 返回投掷器(错误); } }), ).订阅(

Angular 如何在catchError内发出另一个请求? this.service.login()管道( catchError((错误:HttpErrorResponse,responseObservable:Observable)=>{ 如果(error.status==400){ 返回这个.service.doSomethingElse.pipe(map(()=>throwError(error)); }否则{ 返回投掷器(错误); } }), ).订阅(,angular,typescript,rxjs,Angular,Typescript,Rxjs,该请求的响应始终为200,当状态代码为400并从发出其他请求返回时,它不会抛出错误。 任何帮助都会很好。试试这个: this.service.login().pipe( catchError((error: HttpErrorResponse, responseObservable: Observable<boolean>) => { if (error.status === 400) { return this.servic

该请求的响应始终为200,当状态代码为400并从发出其他请求返回时,它不会抛出错误。 任何帮助都会很好。

试试这个:

  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(
使用
map()

您应该使用
mergeMap
或其他展平操作符将其展平。例如:

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

您能否在cathcError
第一行中添加
console.log(error.status)
(在if子句之前),并与我们共享输出?如果
400
string
请尝试
==
而不是
==
,它将打印出400。您可以使用
retryWhen
管道,我宁愿将两个请求合并为一个,而不是嵌套请求。非常感谢。我已经为此做了好几个小时了。
return this.service.doSomethingElse.pipe(mergeMap(() => throwError(error)));