Angular - RxJs ForkJoin如何在出错之后继续多个请求

时间:2018-05-02 08:15:10

标签: angular rxjs fork-join

除了使用不同的参数外,我多次查询单个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 :(得分:2)

最容易将catch的每个请求链接起来,只发出null

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

失败的请求在null将生成的结果数组中只有forkJoin值。

请注意,在这种情况下你不能使用Observable.empty()因为empty()没有发出任何内容而只是完成而forkJoin要求所有源Observable都发出至少一个值。< / p>

答案 1 :(得分:1)

您可以使用rxjs catchError

const request = this.evidenceService.get(this.job.job_id, params)
.pipe(map((res) => res.interactions),
catchError(error => of(undefined)));