Как сделать обработку ошибок, когда мы хотим, чтобы массив наблюдаемых был подписан - PullRequest
0 голосов
/ 13 мая 2019

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

Для временного решения я создал цикл for для массива наблюдаемых и выполняю обработку ошибок для каждой подписки Observable. однако с помощью функции Arrow я могу сохранить порядок результата, излучаемого каждой наблюдаемой.

// Sample code block
const arrayOfObservable = [t,t,t,t,t];

arrayOfObservable.forEach((item, index) => {
    item.subscribe((result) => {
         // Success
    },
    (error) => {
         // Error
    },
    () => {
         // Completed
    });
});

1 Ответ

1 голос
/ 13 мая 2019

Вы можете использовать forkJoin, просто убедитесь в том, что используете catchError для внутренней наблюдаемой, чтобы даже при возникновении ошибки он генерировал все данные вместе с данными об ошибках.

пример:

import { ajax } from 'rxjs/ajax';
import { catchError } from 'rxjs/operators';
import { forkJoin, of, throwError } from 'rxjs';

forkJoin(
    ajax.getJSON('https://api.github.com/users/google'),
    ajax.getJSON('https://api.github.com/users/microsoft'),
    /* this throws an error */
    ajax.getJSON('https://api.github.com/uses').pipe(catchError(error => of(error))),
)
// [object,  object,  Error ]
.subscribe(console.log);

ссылка на такой же рабочий пример: https://stackblitz.com/edit/typescript-czentk

...