订阅中的onError和catch操作符有什么区别?
问题描述:
我经历了两种类型的错误处理中RxJS传来:订阅中的onError和catch操作符有什么区别?
- 在
subscribe
- 使用第二个参数(
onError
)使用catch
操作。
他们之间有什么区别?什么是一些教科书的例子或使用其中任何一个的规则?
this.stream$.subscribe(callback, err => console.error(err))
// vs
this.stream$.catch(err => console.error(err)).subscribe(callback)
答
在你的榜样,你会得到在这两种情况下相同的输出。至于经验法则:
- 使用
do
如果你想做一些与错误(例如记录它),你不想创建预订。例如,你可能会这样做,例如,将一些库(例如angular的Http
库)封装在添加日志记录的通用包装器中(可能会在出现错误时在屏幕底部弹出一个敬酒)。 - 使用
subscribe
如果你想做一些与错误(例如记录它),你想创建预订。遵循Http
的例子,这可能是如果你想启动一个请求,并显示任何你要放置响应的地方出现的错误。如果你想处理错误并且恢复。例如,可能要捕获401错误,刷新登录凭据,然后重试请求。
在您的示例中,由于您只是记录错误,因此catch
将不合适。
cf https://medium.com/@benlesh/on-the-subject-of-subjects-in-rxjs-2b08b7198b93错误传播部分 – user3743222
传递给['catch'](http ://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-catch)运算符返回用于继续链的observable。传递给'subscribe'的错误处理程序没有类似的行为。 – cartant