2

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

这里有什么提示吗?

4

2 回答 2

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(...);
于 2016-09-22T00:04:48.740 回答
2

Angular 2客户端将带有和状态码的Http响应视为错误。因此操作员不会收到发出的响应。4xx5xxmap

请注意,如果由于响应的状态码而引发错误,则错误将包含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");
    }
  }
);
于 2016-09-22T00:06:30.203 回答