簡體   English   中英

Http請求(REST API)angular2時的錯誤處理機制

[英]Error Handling Mechanism while Http Request (REST API) angular2

我在angular2中進行一些REST調用(使用HTTP請求)。依賴於條件請求的類型為GET,POST,PUT,DELETE。 一切正常,我使用下面的方法使用seprate服務文件和類(組件類)文件發出請求。

* service.ts

PostRequest(url,data){
this.headers = new Headers();
this.headers.append("Content-Type", 'application/json');

this.requestoptions = new RequestOptions({
    method: RequestMethod.Post,
    url: url,
    body: JSON.stringify(data),
    headers: this.headers
})

return this.http.request(new Request(this.requestoptions))
    .map((res: Response) => {
        if (res) {
            if(res.status == 201){ 
                return [{ status: res.status, json: res.json }]    
            }
            else if(res.status != 201){ 
                return [{ status: res.status, json: null }]
            }
        }
        // i want to handle error here but how i don't know
    }); 
}
  • component_class.ts
this.base_path_service.PostRequest(url_postSection, data)
.subscribe(res=> {
   if (res[0].status == 201) {  //some stuff here..... }
});

現在來問一下,我的問題是

  • 如何處理http中出現的錯誤,
  • 我知道next,error,oncomplete的訂閱方法,但是可以在映射observable時處理錯誤嗎?返回this.http.request(new Request(this.requestoptions))。map(//是否可以處理這里錯誤而不是在訂閱時)

  • 我希望得到通知給用戶取決於狀態代碼(201,200,204等...),所以我想編寫一次代碼,即在.map的時候,而不是編寫代碼agagin,並在訂閱時再次

    如果任何其他方法有利於錯誤處理,而HTTP請將其作為答案與示例一起發布。

您可以利用catch運算符來處理錯誤:

return this.http.request(new Request(this.requestoptions))
    .map((res: Response) => {
        if (res) {
            if(res.status == 201){ 
                return [{ status: res.status, json: res.json }]    
            }
            else if(res.status != 201){ 
                return [{ status: res.status, json: null }]
            }
        }
    }).catch(error) => {
      // Do something
      // Observable.throw(new Error('some error');
    }); 
}

實際上,當發生錯誤時,將不會調用已注冊的回調而不是地圖運算符。

暫無
暫無

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

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