将Angular中的两个相关API调用与Observables/RxJS合并
假设我有两个返回JSON的API调用: 行: 行详细信息:将Angular中的两个相关API调用与Observables/RxJS合并,angular,rxjs,angular2-observables,Angular,Rxjs,Angular2 Observables,假设我有两个返回JSON的API调用: 行: 行详细信息: { details: { this row details } } 我需要获取行,然后遍历每个row对象,获取detailId以再次调用rowDetails,并将细节附加到row对象。最终结构需要像这样发射: { {"row": 1, "detailId": a, "details": { row details}} {"row": 2, "detailId": b, "details": { row details}}
{
details: { this row details }
}
我需要获取行,然后遍历每个row对象,获取detailId以再次调用rowDetails,并将细节附加到row对象。最终结构需要像这样发射:
{
{"row": 1, "detailId": a, "details": { row details}}
{"row": 2, "detailId": b, "details": { row details}}
}
在angular 1中,我将使用q.allSettled等待所有调用完成
我试图以可观察的方式做到这一点,我在概念上和实践上都在挣扎。我不明白你应该如何实际发出一个合并的“流”作为最终产品
我大致尝试过:
this.http
.get('rows')
.map(res => res.json())
.flatMap(group => this.http.get('rowDetails' + detailId))
.map(res => res.json()).
.subscribe(res => console.log(res))
Subscribe只是发出rowDetails调用。在合并最终产品的结果时,如何遍历rows调用中的每个对象,并将该detailId用于另一个调用?非常感谢您的帮助。您需要获取每个项目,创建一个HTTP请求,在该内部请求完成后,再进一步传播更新的项目
this.http
.get('rows')
.map(res => res.json())
.flatMap(group => this.http.get('rowDetails' + group.detailId)
.map(res => {
group.details = res.json();
return group;
})
)
.subscribe(res => console.log(res))
注意,我实际上是从内部的
映射返回组
。显然有很多方法可以实现这一点,但我认为这是最简单的方法。你的第二个是否得到了
实际上取决于第一个的结果?如果不可观察。combineLatest似乎是最好的选择。是的,它需要来自每个行对象的detailId来进行调用,以获取特定行的行详细信息。因此,您希望为第一次调用的每个结果拆分一个调用,然后将所有结果合并在一起?是的,我相信是这样
this.http
.get('rows')
.map(res => res.json())
.flatMap(group => this.http.get('rowDetails' + group.detailId)
.map(res => {
group.details = res.json();
return group;
})
)
.subscribe(res => console.log(res))