私はAPIサーバーとやりとりするサービスを持っています。 myHttpPost(data)メソッドがあります。このメソッドべき:Angular2では、observableからのエラーレスポンスをインターセプトしてエラーチャンネルに渡す方法
- コールサーバへの角度のhttp.post 応答は、ステータス200を持っている場合、応答が異なるステータス、プロセス応答を有する場合
- を加入者応答のJSONコンテンツを提供し、処理エラーを提供
- 加入者へ
私の方法の現在のバージョンは次のとおりです。
postData(path: string, data: Object): Rx.Observable<any> {
let json = JSON.stringify(data);
return this.http.post(path, json)
.map(res => res.json())
}
mapは成功時にのみ呼び出され、エラー時ではないので、これは上記のリストからポイント3を実行していません。私は追加することにより、順序を変更することができます:「終了し、観察シーケンスを継続します:
.catch(error => {
let myError = prepareErrorContent(error);
return Rx.Observable.throw(myError);
});
を次に加入者(他のサービス)がmyError(それは大丈夫だ)が、rxjsのドキュメントはキャッチについては、次の()メソッドは言う受け取ります次の観測可能なシーケンスとの例外によって。しかし、私はシーケンスが正常に終了し、続行しないようにします。上記のようなcatch()
を使用すると、サブスクライバからのpostData()の次の呼び出しが機能しません(httpコールを行う代わりに、同じエラーがすぐに返されます)。私はシーケンスが終了していないためだと思う。
どうすればよいですか?実際に
this.jsonHttp.postData(path, data)
.subscribe(
struct => onNext(struct),
error => {
let message = this.jsonHttp.extractError(error);
onError(message)
},
() => onComplete ? onComplete() : null
);
どのように 'postData'メソッドを呼び出しますか?ありがとう! –
私の記事の更新をご覧ください。 – camcam