0

我想进行顺序 HTTP 调用并将响应合并为一个唯一的可观察对象。

问题是:我这样做的方式似乎是错误的。实际上,我想将第二个请求中的数据合并到第一个请求中,但是我这样做的方式似乎是用第二个请求的结果替换了第一个请求的结果。

这是第一个请求:

[{vehicule_id:123, statistics:{speed:60,rotation:38}},...]

第二个:

[{vehicule_id:123, name:"name",description:"description},...]

我想得到的结果是:

[{vehicule_id:123, statistics:{speed:60,rotation:38}, name:"name",description:"description},...]

需要了解的重要事项:第二个请求需要在第一个请求的响应中提供 vehicule_id。使用我的代码,第二个调用的响应会替换第一个调用的结果,而不是合并它们。

这是我的代码:

getUserVehiculesInfo(user_id: number, language: string): void {
this._data.getUserVehiculesInfo(user_id, language)
  .pipe(
    map(res => res.data[user_id]),
    switchMap(vehicules => forkJoin(vehicules.map(vehicule => this._data.getVehiculesInfo(tank.vehicule_id, language)))),
    tap(console.log)
  )
  .subscribe();
}
4

1 回答 1

1

一旦你有了 vehiculesInfo(forkJoin 的结果,你只需要将它们与车辆结合起来:

switchMap(
  vehicules => forkJoin(...).pipe(
    map(infos => combineVehiculesAndInfos(vehicules, infos))
  )
)
于 2019-12-08T09:22:18.620 回答