Angular - RxJs ForkJoin Как продолжить несколько запросов даже после ошибки - PullRequest
0 голосов
/ 02 мая 2018

Я запрашиваю одну конечную точку API несколько раз, за ​​исключением разных параметров. По какой-либо причине некоторые из этих запросов могут завершиться ошибкой и вернуть ошибку 500. Если они это сделают, я все еще хочу, чтобы другие запросы продолжали и возвращали мне данные всех успешных запросов.

let terms = [];
terms.push(this.category.category);
terms = terms.concat(this.category.interests.map((x) => x.category));

for (let i = 0; i < terms.length; i++) {

    const params = {
        term: terms[i],
        mode: 'ByInterest'
    };


    const request = this.evidenceService.get(this.job.job_id, params).map((res) => res.interactions);

    this.requests.push(request);

}

const combined = Observable.forkJoin(this.requests);

combined.subscribe((res) => {
    this.interactions = res;
});

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Вы можете использовать rxjs catchError :

const request = this.evidenceService.get(this.job.job_id, params)
.pipe(map((res) => res.interactions),
catchError(error => of(undefined)));
0 голосов
/ 02 мая 2018

Легче всего связать каждый запрос с catch, который излучает только null:

const request = this.evidenceService.get(...)
  .map(...)
  .catch(error => Observable.of(null)); // Or whatever you want here

Неудачные запросы будут иметь значение null в результирующем массиве, которое будет отправлено forkJoin.

Обратите внимание, что вы не можете использовать Observable.empty() в этой ситуации, потому что empty() ничего не излучает, а просто завершает работу, в то время как forkJoin требует, чтобы все исходные Наблюдаемые объекты излучали хотя бы одно значение.

...