【问题标题】:Behavior subject vs Observable error handling行为主体 vs Observable 错误处理
【发布时间】:2017-11-17 20:26:46
【问题描述】:

我在 Angular 中使用 rxJS 并且有一组行为主题,这些主题作为只读的 Observable 公开

public _data = new BehaviorSubject<DataItem[]>([]);
public readonly data$ = this._data.asObservable();

现在我注意到,如果我直接订阅BehaviorSubject 并且出现错误,它将向控制台抛出错误。

但是如果我订阅 Observable 时出现同样的错误,我不会收到任何消息,然后侦听器会自动取消订阅。

我知道这是预期的行为,但是...

我想知道避免代码重复错误的模式是什么,例如

this.myDataService.data$.subscribe(d=> throwSomeError(), e=> handleError(e));
//or use this:
this.myDataService.data$.subscribe(d=> throwSomeError()).catch(e=> handleError(e));

handleError(e)

【问题讨论】:

  • 所以你想多次使用同一个错误处理程序而不是每次都指定它?
  • True .. 那将是一种选择 ..

标签: angular error-handling rxjs


【解决方案1】:

第二个选项会更好,因为 BehaviorSubject 总是会在出现错误时终止流。

这里有更多信息:

How do I throw an error on a behaviour subject and continue the stream?

【讨论】:

  • 谢谢,但这并不能回答我的问题..我知道最好使用,catch(...),但我希望所有订阅者的默认onError为console.error(...)throw Error(..)这怎么可能在订阅Observable 而不是直接订阅BehaviorSubject 时实现
  • ps 我不介意流被杀死..这不是问题我只是想要一个好方法来查看我的订阅者功能中发生的错误...而不是为每个订阅者写.catch(..)。 ...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-20
  • 2014-10-02
  • 2018-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多