【问题标题】:Handle http delete处理 http 删除
【发布时间】:2017-09-30 05:06:26
【问题描述】:

我有一个 REST 服务,我可以通过 id 删除资源。如果 成功 我得到200 没有响应对象。在 error 的情况下,我会得到 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 部分,不管响应状态如何。有人可以解释为什么吗?处理这个问题的正确方法是什么?

提前致谢。

【问题讨论】:

  • 我不确定 Angular 承诺模型,但可能是 res.Json() 抛出的错误(因为响应对象为空)然后被内部管道捕获?
  • 您好 Brumiano,感谢您的提示,实际上您是对的,由于 res.json(),我得到了它。

标签: angular error-handling observable


【解决方案1】:

因为,我在某些情况下会收到回复。我必须添加检查响应是否已定义,然后对其进行处理。

【讨论】:

    猜你喜欢
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    相关资源
    最近更新 更多