处理http删除

时间:2017-05-02 15:33:29

标签: angular error-handling observable

我有一个REST服务,我可以通过id删除资源。如果成功,我得到200没有响应对象。在错误的情况下,我得到404包含错误消息的响应对象。

这是服务代码:

deleteResource(id: number, cascade: boolean) {
    let url = this.url + '/' + id;
    if (cascade) url = url + '?cascade=true';

    return this.http.delete(url)
      .map(res => res.json())
      .do(data => console.log('server data:', data))  // debug
      .catch(this.handleError);
  }

这里也是handleError函数:

private handleError(error: Response | any) {
    let body: ErrorMessage;
    // In a real world app, we might use a remote logging infrastructure
    // We'd also dig deeper into the error to get a better message
    if (error instanceof Response) {
      try {
        body = error.json();
        console.log(body);
      } catch (e) {
        // No content response..
        body = null;
      }
    }
    let errMsg = (error.message) ? error.message : error.status ? `${error.status} - ${error.statusText}` : 'Server error';
    //console.error(errMsg); // log to console instead
    return Observable.throw(body || errMsg);
  }

我在我的组件中使用如下代码。

this.resourceService.deleteResource(resource.resource_id, cascade).subscribe(
  res=>{
      console.log('This is never executed'+ res);
  },
  err=>{
    console.log('This is always executed' + err);
  }
);

每当我执行上面的代码时,无论响应状态如何,都始终执行err部分。有人可以解释原因吗?处理这个问题的正确方法是什么?

提前致谢。

1 个答案:

答案 0 :(得分:0)

因为,在某些情况下我会得到答复。我必须添加检查响应是否已定义,然后处理它。