在服务中,有以下代码:
getUser(id){
return this.http.get('http:..../' + id)
.map(res => res.json());
}
在组件中:
this.myService.getUser(this.id).subscribe((customer) => {
console.log(customer);
this.customer = customer,
(err) => console.log(err)
});
当'客户'存在时,没问题我得到有关客户的所有信息。
当id不存在时,web api会返回带有消息的“BadRequest”。我该怎么收到这条消息?状态?
谢谢,
答案 0 :(得分:22)
(err)
需要在customer
胖箭之外:
this.myService.getUser(this.id).subscribe((customer) => {
console.log(customer);
this.customer = customer,
},
(err) => {console.log(err)});
要获取错误消息,请添加将返回错误对象的catch
:
getUser(id){
return this.http.get('http:..../' + id)
.map(res => res.json())
.catch(this.handleError);
}
private handleError(error: any) {
let errMsg = (error.message) ? error.message : error.status ? `${error.status} - ${error.statusText}` : 'Server error';
return Observable.throw(error);
}
答案 1 :(得分:2)
有时当你在不使用箭头功能的情况下调用catch时
getUserList() {
return this.http.get(this.constURL + '/loans/all', this.headerOptions)
.catch(this.handleError);
}
handleError(error: Response) {
if (error.status == 500) {
this.router.navigate(['/login']);
} else {
return Observable.throw(error);
}
}
然后它给出错误
错误类型错误:无法读取未定义的属性“导航”未获取此
因为在handleError函数中这个对象是不可访问的..如果你控制this.router那么你将得到未定义的.. 所以这个对象不起作用,并没有让路由器获得所有可用的方法
所以你必须在这里使用箭头功能,如下所示
getUserList() {
return this.http.get(this.constURL + '/loans/all', this.headerOptions)
.catch(error => {
return this.handleError(error);
});
}
handleError(error: Response) {
if (error.status == 500) {
this.router.navigate(['/login']);
} else {
return Observable.throw(error);
}
}
此外,如果你没有提到returnError函数的返回,那么它将再次抛出错误,如
类型的参数'(错误:任何)=> void'不能分配给
类型的参数因此必须为handlerError函数键入return。
登记详情here。他已经很好地解释了所有可能出现的错误和解决方案的代码。