typescript - RXJS Subject - stoppe feil fra å spre seg
Når flere observatører abonnerer på et RXJS Subject, er det mulig å forhindre at en feil fra en observatør sprer seg og stopper de andre observatørene (registrert senere) fra å se hendelsen
Stackblitz-eksempel: 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');
Her ser ikke den tredje observatøren hendelsen når den andre kaster en unntak, og test2-verdien blir ikke sett av noe som helst ettersom den første feilen effektivt stopper subjektet
1st sees: test
2nd sees: test
ERROR Error: 2nd throws error
Uten å åpenbart pakke inn hver subscribe-blokk i en try catch, finnes det en bedre RXJS-rammeverksmåte å sørge for at den tredje observatøren fortsatt ser verdien og at det andre kallet til sub.next() også observeres?
Oppdatering (i henhold til cartants svar):
Dette håndteres bedre i rxjs6 - se oppdatert Stackblitz med den samme koden, men uten bivirkningene: https://stackblitz.com/edit/rxjs6-subject-err
Svar #1
Dette er et kjent problem med RxJS v5, og det er noe som har blitt tatt opp i v6 - der den synkrone feilhåndteringen har blitt endret.
I v6 vil det du ser ikke lenger skje. I stedet vil feil som kastes fra innenfor 'lyttefunksjoner' kastes på nytt asynkront og vil bli sett av applikasjonen som ubehandlede feil.
For mer informasjon, se denne videoen.