我是RxJs和Angular2的新手,我试图正确处理错误。我已经看到Observables的一些例子有onNext,onError和onCompleted事件(例如here,但我看到的所有Angular2 http示例似乎都只使用.catch和.map方法,而我&# 39;我不确定这与OnNext / OnError / OnCompleted模型有什么关系。我正在使用here中的代码:
let stream = this.http.request(options.url, options)
.catch(error: any) => {
this.errorsSubject.next(error);
return Observable.throw(error);
})
.map(this.unwrapHttpValue)
.catch((error: any) => {
return Observable.throw(this.unwrapHttpError(error));
});
我最初想要这样做,以便第一个.catch和.map是/或? (即.map仅在http请求成功时运行),但我不确定这是否可行,然后我阅读帖子here使其更加复杂好像他们可能会说每this fix,如果HTTP代码<200或者> 300 ......,将自动跳过map方法。但是,这并不是我在实践中观察到的角度2.0.0-rc.4 ...
非常感谢您的帮助!
答案 0 :(得分:0)
将catch
视为典型的try
和catch
代码。对于可观察的,所有操作都将按顺序运行,就好像它们位于try
块中一样。如果出现错误,则处理将跳至第一个catch
。
因此,如果您只想成功运行map
,那么您只需将放在之前catch
:
let stream = this.http.request(options.url, options)
.map(this.unwrapHttpValue)
.catch(error: any) => {
this.errorsSubject.next(error);
return Observable.throw(error);
});