RxJs链接Angular2 Http响应可以有条件吗?

时间:2016-08-03 14:39:41

标签: conditional rxjs

我是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 ...

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

catch视为典型的trycatch代码。对于可观察的,所有操作都将按顺序运行,就好像它们位于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);
    });