RXJS 主题 - 阻止错误传播



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

堆栈闪电战示例: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');

在这里,第 3 个观察者看不到事件,因为第 2 个观察者抛出异常,并且 test2 值不会被任何东西看到,因为第一个错误有效地关闭了主题

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

在没有明显地将每个订阅块包装在 try catch 中的情况下,是否有更好的 RXJS 框架方法来确保第三个观察者仍然看到该值并且也观察到对 sub.next(( 的第二次调用?

更新(根据卡坦的回答(:

这在 rxjs6 中处理得更好 - 请参阅具有相同代码的更新 Stackblitz,但没有副作用:https://stackblitz.com/edit/rxjs6-subject-err

这是 RxJS v5 的一个已知问题,在 v6 中已解决 - 其中同步错误处理已更改。

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

有关详细信息,请参阅此视频。

最新更新