没有调用http响应的RxJs / Angular2映射函数

时间:2016-09-21 23:53:39

标签: dictionary angular rxjs observable reactive

好的,我必须对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");
  }
);

这里有任何提示吗?

2 个答案:

答案 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客户端使用4xx5xx状态代码as errors处理回复。因此map运算符不会收到已发出的响应。

请注意,如果由于响应的状态代码而引发错误,则错误将包含statusstatusText属性:

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");
    }
  }
);