RXJS主题-阻止传播错误

时间:2018-09-12 18:19:53

标签: typescript rxjs rxjs5

当多个观察者订阅一个RXJS主题时,是否可以阻止一个观察者传播错误并阻止其他观察者(稍后注册)看到该事件

Stackblitz示例:https://stackblitz.com/edit/rxjs-cy7swm

const sub = new Subject<string>();

sub.asObservable().subscribe((val) => {
  console.log('1st sees: ' + val);
});

sub.asObservable().subscribe((val) => {
  console.log('2nd sees: ' + val);
  throw new Error('2nd throws error');
});

sub.asObservable().subscribe((val) => {
  console.log('3rd sees: ' + val);
});

sub.next('test');
sub.next('test2');

在这里,第三个观察者看不到该事件,因为第二个观察者抛出异常,并且由于第一个错误有效地关闭了对象,因此什么都看不到test2值

1st sees: test
2nd sees: test
ERROR Error: 2nd throws error

没有在尝试捕获中明显包装每个订阅块,是否有更好的RXJS框架方法来确保第3个观察者仍然看到该值,并且对sub.next()的第二次调用是也观察到了吗?

更新(根据Cartant的回答):

这在rxjs6中更好地解决-请参见具有相同代码的更新后的Stackblitz,但没有副作用:https://stackblitz.com/edit/rxjs6-subject-err

1 个答案:

答案 0 :(得分:3)

这是RxJS v5的一个已知问题,在v6中已得到解决-其中synchronous error handling has been changed

在v6中,您所看到的将不再发生。相反,从“侦听器”中引发的错误将被异步地重新抛出,并被应用程序视为未处理的错误。

有关更多信息,请参见this video