2017-08-29 134 views
0

我经历了两种类型的错误处理中RxJS传来:订阅中的onError和catch操作符有什么区别?

  • subscribe
  • 使用第二个参数(onError)使用catch操作。

他们之间有什么区别?什么是一些教科书的例子或使用其中任何一个的规则?


this.stream$.subscribe(callback, err => console.error(err)) 

// vs 

this.stream$.catch(err => console.error(err)).subscribe(callback) 
+0

cf https://medium.com/@benlesh/on-the-subject-of-subjects-in-rxjs-2b08b7198b93错误传播部分 – user3743222

+1

传递给['catch'](http ://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-catch)运算符返回用于继续链的observable。传递给'subscribe'的错误处理程序没有类似的行为。 – cartant

回答

2

在你的榜样,你会得到在这两种情况下相同的输出。至于经验法则:

  • 使用do如果你想做一些与错误(例如记录它),你不想创建预订。例如,你可能会这样做,例如,将一些库(例如angular的Http库)封装在添加日志记录的通用包装器中(可能会在出现错误时在屏幕底部弹出一个敬酒)。
  • 使用subscribe如果你想做一些与错误(例如记录它),你想创建预订。遵循Http的例子,这可能是如果你想启动一个请求,并显示任何你要放置响应的地方出现的错误。如果你想处理错误并且恢复。例如,可能要捕获401错误,刷新登录凭据,然后重试请求。

在您的示例中,由于您只是记录错误,因此catch将不合适。

相关问题