【问题标题】:Error Handling Mechanism while Http Request (REST API) angular2Http请求(REST API)angular2时的错误处理机制
【发布时间】:2016-03-18 06:00:40
【问题描述】:

我正在 angular2 中进行一些 REST 调用(使用 HTTP 请求)。取决于条件请求的类型为 GET、POST、PUT、DELETE。 一切对我来说都很好,我正在使用以下方法使用单独的服务文件和类(组件类)文件发出请求。

* 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 订阅方法,但是否可以在映射可观察 i.r 时处理错误 返回 this.http.request(新请求(this.requestoptions)) .map( //是否可以在订阅时在这里处理错误)

  • 我想通知用户取决于状态代码(201,200,204 等...),所以我想编写一次代码,即在 .map 时而不是 订阅的时候再写代码

    如果有其他方法适用于 HTTP 时的错误处理,请将其作为示例发布。

【问题讨论】:

    标签: rest http service angular


    【解决方案1】:

    您可以利用 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');
        }); 
    }
    

    实际上当发生错误时,映射操作符注册的回调是不会被调用的。

    【讨论】:

    • 好吧,我在您发布答案时已经尝试过了,但现在角度抛出错误Observable is not defined,现在如果我在订阅的err callback function 块中处理此错误,它会处理它认为但我想处理错误仅在 catch 块中,我不想在遇到错误时在 subscribe 块中发送响应我该怎么办?
    • 你需要导入Observable类:import {Observable} from 'rxjs/Rx';。对于您的用例,不要从可观察类中抛出......
    • 我已经从 catch 块返回错误状态以订阅现在从 Rxjs 得到错误`result.subscribe is not a function`
    • 发现错误,每当我返回 error.status 时,角度会抛出名为 result.subscribe is not a function 的错误,但是当我尝试使用 observable.throw(new error(error.status)) 进行相同操作时,它工作正常,但不知道发生的原因。顺便说一句,感谢您的时间。
    • 您应该返回一个 observable 而不是原始值:“Observable.of(error.status);”。如果您找到了问题的解决方案,那就太好了;-)
    猜你喜欢
    • 2016-11-08
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    相关资源
    最近更新 更多