Почему этот throwError не попадает в catchError? - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь создать работоспособный оператор и выдавать, когда определенные условия не выполняются. Однако я не могу выдать и поймать ошибку.

Это мой способ передачи:

// My custom pipeable
export function waitFor<T>(thisToComplete$: Observable<any>) {
  return (beforeRunningThis$: Observable<T>) => {
    return new Observable<T>(observer =>
      thisToComplete$.pipe(first()).subscribe(x => {
        if (x !== 'Success') {
          console.log('Non success result encountered');
          return throwError('Rando IO Error');
        }
        return beforeRunningThis$.subscribe(observer);
      })
    );
  }
}

И код потребления:

const preReq$ = timer(1000);
const dataReq$ = getData();

try {
  dataReq$
    .pipe(waitFor(preReq$), catchError(x => {
      console.log('Code here reached');
      return of('Error was handled either here')
    }))
    .subscribe(x => console.log(`I have result ${x.toString()}`));
} catch (e) {
  console.log('Error was handled here');
}

Однако ни одна из вышеперечисленных консолей не регистрируется.

Вот stackblitz

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Вам нужно избавиться от обработки ошибок в трубе оператора.В основном вы потребляете ошибку там:

dataReq$
    .pipe(waitFor(preReq$))
    .subscribe(x => { 
      console.log(`I have result ${x.toString()}`);
    }, error => {
       console.log('Code here reached');
       // handle error
    });
1 голос
/ 24 сентября 2019

Поскольку вы используете наблюдаемую конструкцию, observer.error - это то, как вы бросаете

    if (x !== 'Success') {
      console.log('Non success result encountered');
      observer.error('Rando IO Error');
    }
...