我有一个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
部分。有人可以解释原因吗?处理这个问题的正确方法是什么?
提前致谢。
答案 0 :(得分:0)
因为,在某些情况下我会得到答复。我必须添加检查响应是否已定义,然后处理它。