Ionic Angular:创建通用的http错误处理程序

时间:2017-02-23 05:29:54

标签: angular error-handling ionic2

我是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 函数。

无论如何要制作一个通用的错误处理程序,它以一种将自定义规则/消息作为Toa​​st呈现并使其干燥的方式进行修饰?

1 个答案:

答案 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.
        })
    }
}

但是,这只是为了防止你需要一个通用的处理程序。