我是Angular2的新手,我像这样做HTTP请求:
this.http.get(...).map(res=>res.json()).subscribe(data=>{
//..do something
},err=>{
if(err.status == 400){
this.presentToast('Validation error');
}else if(err.status == 403){
this.presentToast('Authorization error'):
}else if(err.status == 500){
this.presentToast('Something wrong with server');
}else ...
});
我想要一个用户可以理解的每个常见状态代码的自定义消息,但是问题是我将这些 if and and blocks 编写给我所做的每个http请求我拥有的ts文件,因此我基本上会在每个ts文件中导入toastController,然后写 presentToast 函数。
无论如何,是否有一个通用错误处理程序以一种将自定义规则/消息作为敬酒的方式进行装饰的通用处理程序,并使其干燥?
您可以通过创建这样的可观察到的常见来做到这一点:
您的common.ts
将具有此方法:(例如,此组件是CommonProvider
,如在CommonProvider
类中所写)。
httpGetCall(url){
return Observable.create(observer => {
this.http.get(url)
.map(res => res.json())
.subscribe(data => {
console.log("Your data : " , data);
observer.next(data);
},(err) => {
console.log("Your error : ", err);
observer.error(err);
if(err.status == 400){
this.presentToast('Validation error');
}else if(err.status == 403){
this.presentToast('Authorization error'):
}else if(err.status == 500){
this.presentToast('Something wrong with server');
}else ...
});
});
}
从您的调用方法中,您可以做到这一点:
@Component({
templateUrl: "<your-html-path/code>",
providers: [CommonProvider]
})
export class YourPage{
constructor(private common: CommonProvider){
this.common.httpGetCall(<url>)
.subscribe(data => {
//..do something
},(err) => {
//.. Any other operation or nothing to do as toast action is already done.
})
}
}
不过,这是为了以防万一您需要一个通用处理程序。