更新
问题似乎是地图功能没有在“失败”的请求上运行。这意味着,如果我正在与之交谈的 API 返回422 Validation Failed
错误(或其他 4xx 错误),Angular 会将其视为失败并导致 Observer 运行订阅的错误回调,并在此过程中跳过 map 函数。
是否可以强制 Angular 将某些 4xx 错误视为成功请求,或者即使 Observable 返回错误也强制 map 函数运行?
我在 Angular2 应用程序中运行了以下代码:
import {Injectable} from "angular2/core";
import {Observable} from "rxjs/Rx";
import {Http, Headers, ResponseOptions, Response} from "angular2/http";
import 'rxjs/add/operator/map';
...
public login (email : string, password : string) {
return this.http.post(_endPoint + '/auth/login/', JSON.stringify({
email: email,
password: password
}), {
headers: new Headers({
'Content-Type': 'application/json'
})
})
.map (res => {
let data = res.json();
console.log(data);
return data;
});
}
代码执行良好,但未触发 map 函数。我没有收到任何错误,并尝试使用和不import 'rxjs/add/operator/map'
使用相同的结果运行代码。我也尝试过更简单的地图功能.map (res => res.json());
。
在这两种情况下,我都希望.subscribe()
函数中返回的结果是 JSON 响应,但我得到的是原始响应。
编辑:添加了请求数据的屏幕截图和响应
回复:
[{"field":"email","message":"Email or password incorrect."},{"field":"password","message":"Email or password incorrect."}]
我还在一个完全成功的请求(状态代码:200)上对其进行了测试,并且地图功能似乎工作正常。所以我猜它只在返回成功响应时运行。有没有办法让它运行,或者指定它应该运行的其他状态代码?