簡體   English   中英

Ionic Angular:創建通用的http錯誤處理程序

[英]Ionic Angular : Create generic http error handler

我是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文件中,所以基本上我導入了ToastController在每個ts文件中寫入presentToast函數。

反正有沒有制作一個通用的錯誤處理程序,它以一種方式修飾它將自定義規則/消息作為Toa​​st呈現並使其變干?

你可以通過這樣創建一個常見的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.
        })
    }
}

但是,這只是為了以防萬一你需要一個通用的處理程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM