代码之家  ›  专栏  ›  技术社区  ›  Chris White

RXJS主题-阻止错误传播

  •  3
  • Chris White  · 技术社区  · 6 年前

    当多个观察者订阅一个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');
    

    在这里,当第二个观察者抛出异常时,第三个观察者看不到事件,而test2值也看不到,因为第一个错误有效地关闭了主题

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

    try-catch中的每个subscribe块,是否有更好的RXJS框架方法来确保第三个观察者仍然看到值和对的第二个调用下一步()也被观察到了?

    更新(根据cartant的回答):

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

    1 回复  |  直到 6 年前
        1
  •  3
  •   cartant    6 年前

    这是rxjsv5的一个已知问题,v6已经解决了这个问题,其中 synchronous error handling has been changed

    有关详细信息,请参阅 this video