在 angular7 中,如何从 2 个不同的依赖 http 调用中获得组合响应。第一个 http 调用 returns 对象数组及其相关数据

In angular7, how to get combined response from 2 different dependent http call. first http call returns an array of object and other its related data

我的第一个apireturns关注数据

{
"resp": [
  {
    "id": "932e",
    "name": "jon"        
  },
  {
    "id": ...
    "name": ..,
  }
]       

}

我必须遍历这个数组并使用上面的 id 再次调用 API,returns 数据是这样的

{
"posts": [
  {
    "id": "1111",
    "title": "post on facebook"        
  },
  {
    "id": "2222",
    "title": "post on covid"        
  }

]      

决赛 数据应采用这种格式

{
  "resp": [
    {
      "id": "932e",
      "name": "jon",
      "posts": [
        {
          "id": "1111",
          "name": "post on facebook"
        },
        {
          "id": "2222",
          "name": "post on covid"
        }
      ]
    }   
  ]
}

像这样调用第二个 api 的方法签名

public getUsersPost(userId) {

     return this.datasetService.getPosts(userId).pipe(
      map(ds => {
        return ds.posts
      }));
  }

不确定如何为 >

使用 map、mergreMap 或 concatMap

提前致谢

您选择的映射运算符取决于您想要的加载策略。 mergeMap 并行发送所有请求(您可以限制同时请求的最大数量),而 concatMap 将串行执行它们。我还建议将第一个数组拆分成它的组成部分。

我怀疑你想要这样的东西:

const populatedUsers$ = this.getUsers.pipe(
  mergeMap(userArray => from(userArray)), // now emitting each user separately)
  mergeMap(user => this.getUsersPost(user.id).pipe(
    map(ds => ({ ...user, posts: ds.posts }))
  ), null, 5), // maximum of 5 concurrent requests
  toArray() // convert everything back to a single array
);