我想在使用switchMap引发错误时捕获错误

时间:2019-07-08 06:33:51

标签: angular typescript

使用switchMap()时尝试捕获错误时出现问题。 我想检查每个单独的api数据是否已经存在。

这是我的代码

public signupform(userData: SignupRequest): Observable<any>{

    return this.http.post('api/auth/createorganisation')
    .pipe
    (tap( // Log the result or error
      data => {
        if (data.status['message'] === 'Success.') {

      switchMap(() => this.http.post('api/auth/createuser')
       .pipe(
        catchError((error) => this.handleError(error))
        )
      )

        }else{
          throw new Error(data.status['message']);

        }
      }
    )
    )
  }

  error: boolean;
  private handleError(error: HttpErrorResponse) {

    this.error = true;
    console.log(error)
    return empty();
  }

希望大家都能提供帮助。

预先感谢

1 个答案:

答案 0 :(得分:0)

您在switchMap内使用tap是不正确的。您需要(根据需要)在switchMap运算符之前/之后移动tap(如下所示)(在此示例中,您不需要tap运算符btw):

public signupform(userData: SignupRequest): Observable<any>{

    return this.http.post('api/auth/createorganisation')
     .pipe(             
         switchMap((<any>data) => {
               if (data.status['message'] === 'Success.') {
                    return this.http.post('api/auth/createuser').pipe(
                      catchError((error) => this.handleError(error))
                    );
                }else{
                   throw new Error(data.status['message']);
               }
          })
       )
   )
}

error: boolean;
private handleError(error: HttpErrorResponse) {
  this.error = true;
  console.log(error)
  return empty();
}

希望这会有所帮助。

进一步阅读:

https://www.learnrxjs.io/operators/transformation/switchmap.html