在 angular 6 中出现错误时执行订阅
Subscribe executed while getting error in angular 6
最近我将 angular 5 升级到 angular 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 错误时。我能够在错误处理程序中捕获此错误,但仍然执行订阅,为什么?只有在收到没有错误的响应时才应调用订阅。
我对此很陌生,但在 angular 5 中它并没有发生。那么谁能纠正我做错了什么?
订阅可让您处理从注册函数返回的任何内容。但是,为什么你只是捕获错误你应该至少映射你的结果并在它成功时 return 它。另外我不认为你应该做什么来捕捉和抛出错误。
希望对您有所帮助
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
},
)
最近我将 angular 5 升级到 angular 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 错误时。我能够在错误处理程序中捕获此错误,但仍然执行订阅,为什么?只有在收到没有错误的响应时才应调用订阅。
我对此很陌生,但在 angular 5 中它并没有发生。那么谁能纠正我做错了什么?
订阅可让您处理从注册函数返回的任何内容。但是,为什么你只是捕获错误你应该至少映射你的结果并在它成功时 return 它。另外我不认为你应该做什么来捕捉和抛出错误。
希望对您有所帮助
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
},
)