我在服务中使用angular6 HTTPClient,并希望维护Observable到订阅服务器的下一条路径和错误路径。
例如我的组件看起来像这样:
private myFun(query: string) {
this.myService.login(data).subscribe(next => {
// Do successful stuff
console.log('Got the data: ' + next);
},
err => {
// Handle all errors here
console.error('good luck next time')
});
}
我的服务正在使用管道以及地图和catchError。
private findData(in: string): Observable<string> {
return this.http.post<string>(self.url, '')
.pipe(
map( response => {
//Check the data is valid
if (this.dataValid(response)){
return this.convertedData(response);
} else {
throw new Error('failed parsing data');
}
}),
catchError(this.handleError)
);
}
我可以检测到解析问题并通过catchError引发错误,但是我一直在努力了解如何处理catchError。
错误处理程序如下:
private handleError(error: HttpErrorResponse) {
if (error.error instanceof ErrorEvent) {
// Client Side Error
console.error('Client side error:', error.error.message);
} else if (error.message === 'failed parsing data') {
// Client Side Processing Error
console.error(error.message);
return throwError(error.message);
} else {
// Service Side Error
console.error(`Server returned code ${error.status}, ` + `body was: ${error.error}`);
}
// return an observable error message
return throwError('failed to contact server');
}
它可以完成工作,但我不禁想到这样做必须有一种更好的,更多的Angular / RxJS方法。
我期望的是击中错误处理程序的'error.error instanceof ErrorEvent'路径。我不了解如何更新“错误:HttpErrorResponse”参数-我只是抛出了“新错误('解析数据失败');”。
有什么建议/建议吗?
答案 0 :(得分:1)
根据您的代码,很明显catchError
回调可以采用HttpErrorResponse
或Error
类型。因此,catchError
回调输入应为any
或Error | HttpErrorResponse
这样-
private handleError(error: any // or it can be Error | HttpErrorResponse) {
//now do console.log(error) and see what it logs
//as per the output adjust your code
if (error instanceof Error) {
// Client Side Error
console.error('Client side error:', error.error.message);
} else if (error.message === 'failed parsing data') {
// Client Side Processing Error
console.error(error.message);
return throwError(error.message);
} else {
// Service Side Error
console.error(`Server returned code ${error.status}, ` + `body was: ${error.error}`);
}
// return an observable error message
return throwError('failed to contact server');
}