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

Kay*_*Kay 9 fork-join rxjs angular

除了使用不同的参数外,我多次查询单个 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;
});
Run Code Online (Sandbox Code Playgroud)

mar*_*tin 8

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

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

失败的请求将null在由 发出的结果数组中只有值forkJoin

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


ibe*_*oun 5

您可以使用 rxjs catchError

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