RXJS Subject - предотвращение распространения ошибок - PullRequest
0 голосов
/ 12 сентября 2018

Когда несколько наблюдателей подписываются на Субъект 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');

Здесь 3-й наблюдатель не видит событие, поскольку 2-е создает исключение, а значение test2 ничем не видится, поскольку первая ошибка эффективно закрывает объект

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

Без явного переноса каждого блока подписки в перехвате попытки, существует ли лучший способ инфраструктуры RXJS, чтобы убедиться, что третий наблюдатель все еще видит значение, и также наблюдается второй вызов sub.next ()?

Обновление (согласно ответу участника):

Это лучше обрабатывается в rxjs6 - см. Обновленный Stackblitz с тем же кодом, но без побочных эффектов: https://stackblitz.com/edit/rxjs6-subject-err

1 Ответ

0 голосов
/ 12 сентября 2018

Это известная проблема с RxJS v5, и эта проблема была решена в v6 - в которой была изменена синхронная обработка ошибок .

В v6 то, что вы видите, будетбольше не бываетВместо этого ошибки, выданные из «слушателей», будут перебрасываться асинхронно и будут рассматриваться приложением как необработанные ошибки.

Для получения дополнительной информации см. это видео .

...