我正在尝试利用Angular 2的HTTP方法在服务中工作正常,直到服务器返回无效响应。下面是从我的服务方法代码:为什么我的RxJS订阅错误处理程序不会触发?
getCalcCode(request: CalculatorRequest) {
this.http.post(this._serviceUrl, JSON.stringify(request), this.options)
.map((response: Response) => response.json().returnData as CalculatorResponse)
.catch((error) => {
return Observable.throw(error);
})
.subscribe((response: CalculatorResponse) => {
if (response.returnCode === '000') {
console.log('Code is zero!');
}
}, (error) => {
console.error('Error: : ', error);
});
}
当服务器返回一个无效的响应,Map
运算符返回未定义的,因此,试图从我的订阅方法中访问response.returnCode
的时候,我收到:
ERROR TypeError: Cannot read property 'returnCode' of undefined
而异步代码只是停止执行......订阅上的错误函数永远不会被调用(编辑:因为服务器正确响应和映射工作正常,只是对错误的JSON格式)。
我该怎么做才能确保订阅中的错误是从我的错误处理程序中捕获的?
谢谢!
编辑
在评论中进一步讨论这之后,就是我真正问这里究竟是如何从我的“订阅”回调中捕获错误?我只需要使用try/catch块?
您确定服务器返回带有HTTP错误代码(如此> 200)的响应吗? –
看来你已经想通了一切。您的错误回调没有执行,因为您的成功回调被执行。它是一个或另一个,从来都不是。它只是看起来你的map()回调和/或你的成功回调和/或你的后端有一个需要修复的bug。 –
是的,服务器实际上是用状态码200响应,只是不正确的JSON。 – slashp