【发布时间】: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