使用foreach循环和Observable链接多个调用

时间:2017-10-12 18:25:35

标签: angular rxjs observable

我想将多个请求链接到我从数组中获取的url。在下一个链之前,我想等待前一个链完成。如果先前的失败与否则无关紧要。我正在尝试使用forkJoin,但我知道如果其中一个请求失败,它将返回错误。

this.dataServers.forEach(dataServer => {
    observableBatch.push(this.getFoodsByQuery(dataServer.url, query));
});

return Observable.forkJoin(observableBatch).subscribe(data => {
    this.searchingServer.next(null);
    observer.complete();
});

我不知道如何使用flatMap。

2 个答案:

答案 0 :(得分:4)

在您的情况下,合适的运营商是concat

  

通过顺序发射将多个Observable连接在一起   他们的价值观,一个Observable接着另一个。

示例:

// Batch of requests
let batch = [
  Observable.of(1),
  Observable.of(2).delay(1500),
  Observable.throw('Error'),
  Observable.of(3).delay(300),
  Observable.throw('Error again'),
  Observable.of(4).delay(600)
];

// Catch (ignore) error of every request
batch = batch.map(obs => {
  return obs.catch(err => Observable.of(err));
});

// Concat observables 
Observable.concat(...batch).subscribe({
  next: v => console.log(v),
  complete: () => console.log('Complete')
});

输出:

1
2
'Error'
3
'Error again'
4
'Complete'

答案 1 :(得分:1)

您是否尝试过使用forkJoin的OnErrorResumeNext()?

return Observable.forkJoin(observableBatch)
.OnErrorResumeNext()
.subscribe(data => {
  this.searchingServer.next(null);
  observer.complete();
});