サーバーが無効な応答を返すまで、正常に動作しているサービスで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
そして、非同期コードは単に実行を停止します...サブスクリプションのエラー関数は呼び出されません(EDIT:サーバーが正しく応答し、マッピングが正しく機能しているため、間違ったJSON形式)。
サブスクリプション内のエラーがエラーハンドラから取り込まれるようにするにはどうすればよいですか?
ありがとうございます!
EDIT
さらなるコメントでこれを議論した後、私は本当にここに求めていることは、私の「購読」コールバック内からエラーをキャッチする方法を正確に? try/catchブロックを使うだけでいいですか?
サーバーはHTTPエラーコード(つまり> 200)を返しますか? –
あなたはすでにすべてを考え出しているようです。成功コールバックが実行されるため、エラーコールバックは実行されません。どちらか一方であり、両方ではありません。 map()コールバック、成功コールバック、バックエンドのバグが修正されているようです。 –
確かに、サーバーは実際には不正なJSONだけでステータスコード200で応答しています。 – slashp