Как обработать ошибку с массивом Observable с помощью forkJoin? - PullRequest
0 голосов
/ 05 мая 2020

Я получаю наблюдаемый поток из API для своего приложения angular и хочу обработать ошибку с помощью forkjoin.

import { Observable } from 'rxjs';
import { forkJoin, of, throwError } from 'rxjs';

//An array of observable
let source$ = this.selectedItem.map(item => {
  let payload = {foo: item.foo};
  return this.apiService.updateBar(payload);
});

//Action when a response has been received for all observable
forkJoin(source$).subscribe(
   () => {
     this.action1();
     this.action2();
     this.action3();
   }
)

Я искал, как обрабатывать ошибку, в официальной документации rx js forkjoin , и они не упоминают, как обрабатывать ошибку, когда у вас есть массив Observable на входе.

Итак, я попытался обработать ошибку непосредственно на наблюдаемом, и это почти работает:

  let source$ = this.selectedItem.map(item => {
      let payload = {foo: item.foo};
      return this.apiService.updateBar(payload).pipe(
        catchError(
          msg => {
           this.errorAction1();
           this.errorAction1();
           this.errorAction1();
          }
        )
      );
    })

Но я получил эту ошибку:

Вы указали undefined там, где ожидался поток. Вы можете предоставить Observable, Promise, Array или Iterable.

Итак, мне интересно, как правильно реализовать обработчик ошибок с помощью forkJoin? И как исправить эту ошибку? Спасибо большое

1 Ответ

1 голос
/ 05 мая 2020

Если вы просто хотите поймать ошибку, когда кто-то из них терпит неудачу, добавьте обратный вызов error в свою подписку. Нет необходимости добавлять отдельные обработчики ошибок для каждого Observable.

forkJoin(source$).subscribe(
    () => {
        this.action1();
        this.action2();
        this.action3();
    },
    (error) => {
        console.log(error);
    }
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...