Angular 4.0.0 http服务在状态为403时不会自动抛出错误

Angular 4.0.0 http service does not throw error automatically when status is 403

正如我在另一个 Whosebug 答案中读到的那样 - 来自 Angular 2 alpha 47 - 当响应状态字段大于 299 时,http 服务应该自动抛出错误。我的问题是在什么阶段?

我收到状态为 403 的 http 响应,但服务似乎允许执行所有 map() 方法。为什么它不将响应重定向到 catch 块?

getLoggedInUser(): Observable<User> {
  return this.http.get(this.baseApiUrl + `api/user/me`)
    .map((res: Response) => {
      console.log(res.status); <-- 403
      return res.json();
   })
   .map((user: User) => new User().deserialize(user)) <-- This method shouldn't be fired, because it causes unexpected behaviour.
   .catch((error: any) => { 
      console.log(error);
      if (error.status === 403) {
        this.isRequestForbidden = true;
      } 
      return Observable.throw(error || 'Server error') 
  });

}

Angular 的这个特定方面可能会从早期的 alpha 版本开始改变。在版本 4.3+ 中,他们引入了全新的 http 服务来取代旧的。

那么你为什么不检查第一个 .map() 中的 403 状态并在那里抛出错误或其他东西。但基于此 commit 这不应该是个案。

In case if you are on the latest angular like 4.3+ make sure you are using HttpClient from @anghular/common/http