RxJS: Тематические ошибки касаются подписчиков - PullRequest
0 голосов
/ 08 июня 2018

У меня есть ситуация, в которой мой Subject возвращает ошибку, но выполняется метод ошибки Observable, подписавшегося на этот Subject, даже если подписка на этот Observable не завершается с ошибкой ивернуть ошибку.Например:

this.createPayment$ = this.wizard$.pipe(
  switchMap((wizard) => willReturnAnErrorObservable()),
  share()
);

this. handleSuccessSubscription = this.createPayment$.pipe(
  filter((someEvent: SomeEvent) => event.succeeded),
  switchMap((someEvent: SomeEvent) =>
      // this is never called because the filter above does not pass
      doesNotFailObservable()
  )
).subscribe((confirmedPayment: PaymentDeviceEvent) => {
  // not important
},
  (error) => {
  // this error block is still being called, even though the this.
  // handleSuccessSubscription switchMap is not executed, because the 
  // this.handleSuccessSubscription$ above returns an error
});

В этом коде выполняется метод ошибки createPaymentSuccessfulSubscription, даже если switchMap возвращает ok, потому что 'external' Subject выбрасываетошибка.

Есть ли способ запретить подписчикам также получать ошибки?Это не критично, потому что я могу отфильтровать возвращенный error, чтобы определить, нужно ли его обрабатывать здесь;но это немного вонючий, и я бы хотел, чтобы этот блок ошибок вообще не выполнялся.

1 Ответ

0 голосов
/ 09 июня 2018

Вы должны отлавливать ошибки и обрабатывать их до того, как они будут переданы конечному потребителю

import { of } from 'rxjs';
import { catchError, switchMap, share } from 'rxjs/operators';

this.createPayment$ = this.wizard$.pipe(
  switchMap((wizard) => willReturnAnErrorObservable()),
  catchError((error) => of(console.log('log error', error))),
  share(),
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...