我有两个 API 要按顺序调用,第一个 API 返回的数据用于第二个。
我试过在第一次调用中使用 concatMap
,然后使用第二次调用中返回的值,但是当我订阅可观察对象时,我只得到第二次调用的数据。
如何在单个可观察对象中获取来自两个调用的数据?
this.dataService.getPlayerData("heunetik").pipe(
concatMap(data => this.dataService.getLifetimeStats(data.payload.guid))
).subscribe(finalData => {
console.log(finalData);
});
阅读文档,这似乎是最有意义的,但是示例非常困惑...:/
最佳答案
您想做某种内部映射来组合数据:
this.dataService.getPlayerData("heunetik").pipe(
switchMap(data => this.dataService.getLifetimeStats(data.payload.guid)
.pipe(map(innerData => [data, innerData])))
).subscribe(finalData => {
console.log(finalData);
});
这将返回数组中的数据,第一个数据集为 0,第二个数据集为 1。
switchMap 只是我的偏好,这里在 switch/concat/merge 之间并不重要...它们的用途略有不同,这对多次发射很重要,但它们在这里的功能完全相同,因为它们都是单次发射可观察的。我更喜欢 switch,因为我认为它在语义上更清晰,我期待单一发射,但在这一点上可能会有不同意见。
高阶映射曾经提供允许这种组合的第二个参数,但他们用 rxjs 5 或 6 左右删除了它以支持内部映射模式以节省导入大小(IMO 这是一个错误的决定.. . map 参数经常有用,内部 map 看起来很杂乱)。
关于javascript - 如何按顺序调用两个 API 并将两者的数据作为单个 Observable 返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55711416/