我正在嘗試利用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