【问题标题】:RxJS: forkJoin mergeMapRxJS:forkJoin 合并映射
【发布时间】:2018-10-05 18:47:29
【问题描述】:

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

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

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

【问题讨论】:

    标签: rxjs


    【解决方案1】:

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

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

    或者,如果它不是那么简单,并且您需要 pagesToFetch 作为 Observable 来首先收集 url,您可以使用例如:

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

    【讨论】:

    • 是的,我摆脱了 mergeMap 并且它正在工作,谢谢
    【解决方案2】:

    试试下面的示例格式...

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

    【讨论】:

      猜你喜欢
      • 2014-09-21
      • 1970-01-01
      • 2012-12-18
      • 1970-01-01
      • 2018-05-25
      • 2018-11-16
      • 1970-01-01
      • 1970-01-01
      • 2016-06-08
      相关资源
      最近更新 更多