使用 Observable 的两个同步 http 调用
Posted
技术标签:
【中文标题】使用 Observable 的两个同步 http 调用【英文标题】:Two synchronous http calls using Observable 【发布时间】:2016-11-18 15:34:39 【问题描述】:我对 Angluar2 应用程序中的 Observables 有疑问。假设我需要进行两个单独的 http 调用。一个调用直接取决于另一个调用的结果。代码如下所示:
this.http.get('http://kalafior/group/'+id)
.map(res => res.json())
.subscribe(group =>
//url depends on previous call result
this.http.get('http://kalafior/group/'+group.id+'/posts')
.map(res => res.json())
.subscribe((res) =>
console.log(res);
);
);
我想摆脱嵌套的 subscribe() 调用。
【问题讨论】:
同类型的题,可以看这里了解一下***.com/questions/35268482/… 【参考方案1】:flatMap 正是为这种场景而创建的。
this.http.get('http://kalafior/group/'+id)
.map(res => res.json())
.flatMap(group => this.http.get('http://kalafior/group/'+group.id+'/posts') )
.map(res => res.json())
.subscribe((res) =>
console.log(res);
);
);
【讨论】:
【参考方案2】:你可以做的是利用 Rxjs 的.do()
函数。看看here
【讨论】:
以上是关于使用 Observable 的两个同步 http 调用的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Angular/RxJS 中合并两个 observable?
在得到我的 Observable 之前等待一个 Promise
Angular 将 Observable<any> 实现为同步字符串 [] 数组