如何将 2 个单独的 http 请求合并为一个响应(将它们合并)?
Observable.merge(
this.http.get(url1), // [{"city":"New York"},{"city":"Chicago"}]
this.http.get(url2) // [{"city":"Washington"},{"city":"Detroit"}]
).subscribe(res => console.log(res.json()))
我得到了两个数组:
[{"city":"New York"},{"city":"Chicago"}],
[{"city":"Washington"},{"city":"Detroit"}]
我需要的是一个包含组合结果的数组:
[{"city":"New York"},{"city":"Chicago"},{"city":"Washington"},{"city":"Detroit"}]
即,4 个对象的 1 个可观察值,而不是 2 个对象的 2 个可观察值。
最佳答案
我相信你想要 forkJoin
(变成 Zip 运算符),它返回一个可观察的序列,其中包含一个收集所有输入序列的最后元素的数组:
combine(): {
return Observable.forkJoin(
this.http.get(url1).map(res => res.json()),
this.http.get(url2).map(res => res.json())
)
}
...
this.combine().subscribe(result =>
console.log(result[0], result[1])
)
您可能对 combainLatest 感兴趣运算符。
<小时/>UPD要获得组合结果,您可以使用map
和展开运算符:
combine(): {
return Observable.forkJoin(
this.http.get(url1).map(res => res.json()),
this.http.get(url2).map(res => res.json())
)
.map((data: any[]) => ([...data[0], ...data[1]])
}
...
this.combine().subscribe(result =>
console.log(result)
)
关于javascript - 如何组合两个返回 Rx Observables 的相似 http 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51003275/