在角度6中获得错误时执行订阅

tec*_*ura 1 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 => {

    }
)
Run Code Online (Sandbox Code Playgroud)

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

我是新手,但在角度5中它并没有发生.所以任何人都可以纠正我的错误吗?

Tah*_*ued 13

订阅允许您处理从注册功能返回的任何内容.但是,为什么你只是捕捉错误,你应该至少映射你的结果,并在它成功时返回它.另外我不认为你应该做什么来捕捉和抛出错误.

我希望这能帮到您

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
    },
)
Run Code Online (Sandbox Code Playgroud)