离子角:创建通用HTTP错误处理程序



我是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.
        })
    }
}

不过,这是为了以防万一您需要一个通用处理程序。

相关内容

  • 没有找到相关文章

最新更新