我是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和else阻止写入我执行的每个http请求,以及每个ts文件我有,所以基本上我在每个ts文件中导入ToastController并编写 presentToast 函数。
无论如何要制作一个通用的错误处理程序,它以一种将自定义规则/消息作为Toast呈现并使其干燥的方式进行修饰?
答案 0 :(得分:3)
你可以通过创建一个像这样的公共Observable来实现:
您的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.
})
}
}
但是,这只是为了防止你需要一个通用的处理程序。