Как реализовать общий (глобальный) catchError для любого наблюдаемого? - PullRequest
1 голос
/ 31 марта 2020

Изображение, у меня есть следующий код:

if (something) {
    return A;
} else {
    return B;
}

A и B, являются наблюдаемыми.

Я хочу перехватить в них обе ошибки и обработать таким же образом.

Как это реализовать.

На данный момент я бы написал что-то вроде этого:

const errorHadler = ...;

if (something) {
    return A.pipe(
        catchError(errorHandler)
    )
} else {
    return B.pipe(
        catchError(errorHandler)
    )
}

Возможно ли использовать только одну catchError для обеих наблюдаемых?

Ответы [ 3 ]

2 голосов
/ 31 марта 2020

Надеюсь, это поможет:

getData(){
 if (something) {
  return A;
 } else {
  return B;
 }
}

this.getData.subscribe(response=>
 {
  // if success do logic here
 }, error=>{
   // Have commonn error handling logic here
});

Надеюсь, это поможет.

1 голос
/ 31 марта 2020

Вы пробовали это?

(condition ? A : B).pipe(catchError(errorHandler)).subscribe(() => {});
1 голос
/ 31 марта 2020

Создайте службу обработки ошибок. Сделайте ее службой в одну тонну, установив в поле: root. Вызывайте метод errorHandler этой службы везде, где вам захочется.

@Injectable({
  providedIn: 'root'
})

export class ErrorhandlerService {

    errorHandler(){
       //logic goes here
    }

}


if (something) {
    return A.pipe(
        catchError(this.errorhandlerService.errorHandler)
    )
} else {
    return B.pipe(
        catchError(this.errorhandlerService.nerrorHandler)
    )
}

Преимущество этого подхода заключается в том, что вы можете повторно использовать службу во всем приложении.

...