Angular4如何使用flatMap链接forkJoin

标签 angular http rxjs chaining

我的情况是,我需要进行 5 个可以并行执行的 http 调用 + 需要在这 5 个之后执行的另一个 http 调用。

我在前 5 个函数中使用了 forkJoin,但我不知道如何链接 flatMap(或其他函数)。

forkJoin(
      firstObservable,
      secondObservable,
      thirdObservable,
      ..)
      .subscribe(results => {

        this.myComposedObject = results[0];
        let secondResult = results[1];
        let thirdResult = results[2];
        [...]


        // !!! AT THIS POINT I WOULD NEED TO MAKE AN EXTRA CALL!
        // results[1] contains data I need to make the extra call


        // 
        this.myComposedObject.second = secondResult;
        this.myComposedObject.third = thirdResult;
});

我在组件内执行此操作,因此最后我将数据分配给 myComlatedObject。

最佳答案

就像你说的,要发出 5 个并行请求,你可以使用 forkJoin 。然后,您想在前 5 个请求完成后发出另一个请求,以便将其与 concatMap 链接起来。运算符(或 mergeMap 也可以在这里工作)。

然后您需要合并所有结果,以便可以使用 map将最后一个结果添加到与前五个结果相同的数组中。

forkJoin(
    firstObservable,
    secondObservable,
    thirdObservable,
    ...
  )
  .concatMap(firstFiveResults => makeAnotherCall(firstFiveResults[1])
    .map(anotherResult => [...firstFiveResults, anotherResult])
  )
  .subscribe(allResults => {
    this.myComposedObject.second = allResults[1];
    this.myComposedObject.third = allResults[2];
    // allResults[5] - response from `makeAnotherCall`
    ....
  });

关于Angular4如何使用flatMap链接forkJoin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49305027/

相关文章:

组件订阅看不到带有 Subject Observable 调用 next() 的 Angular 服务

typescript - RxJs 使用 catchError 类似重试

RxJS 将数组映射到可观察对象并返回到数组中的普通对象

javascript - http post 返回错误,而 $.ajax 不返回错误

javascript - 如何按键提取数组并对其进行分组

android - Android 应用通过 post 发送的参数在 Go 语言编写的后端服务器上始终为空

html - 将 http 转换为 https;为了安全,这是必须的吗?

angular - 导航栏组件上的静态成员不可访问错误

Angular 2排序和过滤

java - Apache HTTPClient 流式传输 HTTP POST 请求?