2016-08-03 55 views
1

我是RxJs和Angular2的新手,我正在努力处理错误。我已经看到一些示例使用onNext,onError和onCompleted事件(例如here,但我看到的所有Angular2 http示例似乎只使用.catch和.map方法,但我不确定这是如何涉及的。到OnNext /的OnError/OnCompleted模型,我的代码工作从here):RxJ可以链接Angular2 Http响应是有条件的吗?

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要么/或? (即只有在http请求成功时,才会运行.map),但我不确定这是否可能,然后通过阅读here这个帖子,看起来他们可能会说根据this fix,如果HTTP代码是< 200或> 300 ...,则地图方法将自动跳过?但是,这不是我在实践中观察到的角2.0.0-rc.4 ...

非常感谢您的任何帮助!

回答

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); 
    });