我有一个关于 Angular2 错误处理最佳实践的问题。这是我用来捕获错误的代码:
Getdata(data: object){
let body = JSON.stringify(data);
let headers = new Headers({ 'Content-Type': 'application/json' });
return this.http.post('/getData', body)
.map((res) => res.json())
.catch(this._errorHandler);
}
_errorHandler(error: Response){
console.log("Error Dataservice", error);
return Observable.throw(error || "Server Error");
}
我是否需要为每个新方法创建一个 Catch,或者我可以始终使用 _error_Handler 吗?
Thx!
服务中的捕获块和组件中的订阅错误回调
这就是我在项目开发过程中开始使用的。服务中的 catch 块负责转换错误。组件中的错误回调负责更新任何视图逻辑。
Service
我很少以我需要的格式从 api 获取所需的数据,因此我在 .map() 方法中转换数据。然后我将一个 catch 块附加到序列中。
// Service Class
getTableData(): Observable<Table>{
return this.http.get('url')
.map(res => {
// transform data as needed
return transformedData;
}
.catch(err => {
// transform error as needed
let transformedError = GlobalFunction.transformError(err);
return Observable.throw(transformedError);
}
}
现在,当发生错误时,我会执行我想要的任何转换。例如,我可以调用一个全局方法,将错误转换为用户友好的响应
// GlobalFunction Class
transformError(err){
switch(err.status){
case 404:
return {
status: err.status,
message: 'Oops, it looks like that resource was not found'
}
break;
}
}
成分
现在在我的组件中,我订阅了序列
// Component Class
ngOnInit(){
this.loading = true;
this.error = false;
this.subscription = this.service.getTableData().subscribe(
res => {
this.table = res;
this.loading = false;
},
err => {
this.message = err.message;
this.error = true;
this.loading = false;
}
);
}
通过将所有数据转换包含在服务中,我保持了视图逻辑的良好和精简。我相信这种方法可以将各个部分分开。服务提供数据,组件更新视图。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)