当我在另一个stackoverflow回答中读到 - 来自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')
});
}
答案 0 :(得分:1)
自早期alpha版本以来,Angular的这一特定方面可能会发生变化。使用版本4.3+
,他们引入了全新的http服务,取代了旧服务。
那么为什么你不能在第一个403
内检查.map()
状态并在那里抛出错误。但基于commit,这不应该是一个案例。
如果您使用最新的角度
中的HttpClient4.3+
,请确保您是。{ 使用@anghular/common/http