好的,我必须对map()
函数不了解。我希望在两种订阅情况下,术语映射都会写入控制台。但是,如果http响应的状态代码为4xx,则不会。
http.get("http://my.domain/rest/path").map(
data => {
console.log("mapped");
return data;
}
).subscribe(
data => {
console.log("good");
},
error => {
console.log("bad");
}
);
这里有任何提示吗?
答案 0 :(得分:3)
map
函数只进行'好'数据而不是错误。在实际情况中,我期望Ok
个案(真实数据)和Bad Request
个案(错误消息)的身体数据也不同。要捕获并处理http.get
函数中的错误,请使用catch
:
let obs = http.get("http://my.domain/rest/path").map(
data => {
console.log("mapped");
return data;
}
).catch(err => console.log(err));
obs.subscribe(...);
答案 1 :(得分:2)
Angular 2 Http
客户端使用4xx
和5xx
状态代码as errors处理回复。因此map
运算符不会收到已发出的响应。
请注意,如果由于响应的状态代码而引发错误,则错误将包含status
和statusText
属性:
http.get("http://my.domain/rest/path").map(
data => {
console.log("mapped");
return data;
}
).subscribe(
data => {
console.log("good");
},
error => {
if (error.status) {
console.log("somewhat bad: " + error.status);
} else {
console.log("really bad");
}
}
);