RxJS:forkJoin mergeMap

时间:2018-10-05 10:29:03

标签: rxjs

我正在尝试发出多个http请求,并在一个对象中获取返回的数据。

const pagesToFetch = [2,3]
const request$ = forkJoin(
  from(pagesToFetch)
    .pipe(
      mergeMap(page => this.mockRemoteData(page)),
    )
)

mockRemoteData()返回一个简单的Promise。 在第一个Observable发出后(一旦从pagesToFetch的第一个条目创建的请求$完成,则不包含第二个值。如何解决此问题?

2 个答案:

答案 0 :(得分:2)

您可以将pagesToFetch中的每个值变成一个Observable,然后等待它们全部完成:

const observables = pagesToFetch.map(page => this.mockRemoteData(page));

forkJoin(observables)
  .subscribe(...);

如果不是那么简单,并且您需要pagesToFetch成为Observable才能首先收集网址,则可以使用以下示例:

from(pagesToFetch)
  .pipe(
    toArray(),
    mergeMap(pages => {
      const observables = pages.map(page => this.mockRemoteData(page));
      return forkJoin(observables);
    }),
  )
  .subscribe(...);

答案 1 :(得分:0)

尝试以下示例格式...

Observable.forkJoin(
   URL 1,
   URL 2
 ).subscribe((responses) => {
   console.log(responses[0]);
   console.log(responses[1]); 
 },
  error => {console.log(error)}
 );