使用 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> 实现为同步字符串 [] 数组

RXJS Observable的冷,热和Subject

如何在 Observable.forkJoin(...) 中捕获错误?

函数返回后 Observable.forkJoin 调用延迟