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

RxJs/Angular2 map function on http response not called

好的,关于 map() 函数,肯定有一些我不明白的地方。我希望在两种订阅情况下,术语 mapped 都会写入控制台。但是,如果 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");
  }
);

这里有什么提示吗?

map 函数只处理 'good' 数据而不处理错误。在实际情况下,我希望 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(...);

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