【发布时间】:2019-08-19 09:18:25
【问题描述】:
我正在使用 Angular 7,我试图捕捉抛出的错误,因为外部 api 返回的值在我期望的值处具有空值。
我似乎无法弄清楚在这种情况下我应该做什么。
我有一个调用 api 的服务。
getObjectValue(param: paramtype): Observable<ObjectValue> {
return this.http.get<objectwithvalues>(environment.baseapiurl + '/api/object/value/'+ param);
}
在消费组件中我像往常一样订阅
testfunction() {
this.service.getObjectValue().Subscribe(v => {
*DO STUFF*
*Error happens* v['o'] // oh no v is null
},
error=>{
console.log('error')
this.snackbar.open('this went wrong' + error);
}
);
}
这是基本情况。 这样做不会触发 'error=>{}' Angular 只是吐出一条错误消息。
所以我在订阅回调范围内尝试了 try/catch。没抓到。
我目前正在尝试将服务代码更改为以下
getObjectValue(param: paramclass): Observable<ObjectValue> {
return this.http.get<EventWifi>(
environment.baseapiurl + '/api/object/value/'+ param).pipe(map(v=> {
if(v === null){
return throwError('v is null');
}
}),
catchError(err => this.errorTest(err))
);
}
this.errorTest(err: any): Observable<any> {
return throwError(err);
}
虽然在订阅者中执行相同操作,但订阅错误函数从未捕获到错误,因此我无法正确处理错误。
使用最新显示的服务功能,根本不会引发任何错误。
我已经尝试了这么多配置上的小差异,我现在几乎记不得了,所以一定有一个基本的东西我搞砸了。
我看过这么多例子,但没有一个能在我的案例中找到并起作用。
【问题讨论】:
-
我认为 HttpInterceptor 将彻底解决您的问题。只需研究并将其导入您的项目。
标签: angular error-handling rxjs try-catch observable