在角度6中出现错误时执行订阅

时间:2018-07-11 12:35:52

标签: angular6 rxjs6

最近我已将角度5升级到角度6,因此我将服务代码如下升级:

register(postBody: any): Observable<any> {
return this.http
  .post(this.remoteUrl + "auth/register", postBody)
  .pipe(
    catchError(this.handleError("register", []))
  );
}

this.authService.register(this.formObj.value).subscribe(
    response => {

    }
)

现在,当我从API收到400错误时。我能够在错误处理程序中捕获此错误,但仍订阅执行,为什么?只有在收到没有错误的响应时,才应调用订阅。

我对此并不陌生,但在角度5中却没有发生。那么有人可以纠正我在做什么错吗?

1 个答案:

答案 0 :(得分:11)

订阅使您可以处理从注册功能返回的所有内容。但是,为什么您只是捕获错误,您至少应该映射结果并在成功后将其返回。另外,我不认为您应该采取哪些措施来捕捉和抛出错误。

希望这对您有帮助

register(postBody: any): Observable<any> {
return this.http
  .post(this.remoteUrl + "auth/register", postBody)
  .pipe(
    map(data => data), //this will return the response when success
    catchError(this.handleError(err =>{
        //Here you can do something like
         err.code === 404 
         ? throwError("Not found")
         : throwError(err)
    }) 
  );
}

this.authService.register(this.formObj.value).subscribe(
    response => {
      // Do stuff whith your result
    },
    err => {
      // Do stuff whith your error
    },
    () => {
      // Do stuff after completion
    },
)