11

我多次查询单个 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;
});
4

2 回答 2

10

最容易将每个请求与catch发出的链接链接null

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

失败的请求将null在结果数组中具有值,该值将由forkJoin.

请注意,您不能Observable.empty()在这种情况下使用,因为empty()它不会发出任何东西,只是完成,同时forkJoin要求所有源 Observables 发出至少一个值。

于 2018-05-02T08:50:20.050 回答
3

您可以使用 rxjs catchError

const request = this.evidenceService.get(this.job.job_id, params)
.pipe(map((res) => res.interactions),
catchError(error => of(undefined)));
于 2018-05-02T08:53:32.973 回答