首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角4嵌套http调用和合并数据

角4嵌套http调用和合并数据
EN

Stack Overflow用户
提问于 2018-01-14 10:45:04
回答 2查看 1.3K关注 0票数 2

我的api在一个http调用中返回20个结果,但是我想要40个记录,我正在进行如下所示的嵌套http调用,我能够获取40个记录,但是当我订阅getALl()方法时,我只得到20个结果;

代码语言:javascript
复制
getAll() {
    return this._http.get(this.baseURL)
      .do((data: any) => {
        this.nextPage = data.next_page_token;
        var results = data.results;
        return this._http.get(`${this.baseURL}?next=${this.nextPage}`).delay(2000).do((d: any) => {
           return Observable.of(results.concat(d.results));
        });
  });
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-14 10:49:47

do()操作符只用于做副作用,它根本不修改正在通过的值。

在您的示例中,您可以使用concatMap()合并两个可观察到的值,并使用map()修改来自内部的发出的值:

代码语言:javascript
复制
return this._http.get(this.baseURL)
  .concatMap((data: any) => {
    this.nextPage = data.next_page_token;
    var results = data.results;

    return this._http.get(`${this.baseURL}?next=${this.nextPage}`)
      .delay(2000)
      .map((d: any) => results.concat(d.results));
  });
票数 6
EN

Stack Overflow用户

发布于 2018-01-14 10:57:28

另一种解决方案是使用mergeMap运算符。

首先输入操作员:

代码语言:javascript
复制
import 'rxjs/add/operator/mergeMap';

然后你就可以像这样锁链

代码语言:javascript
复制
this.http.get(this.baseURL)
            .map((res: Response) => res.json())
            .mergeMap(customer => this.http.get(`${this.baseURL}?next=${this.nextPage}`)
            .map((res: Response) => res.json())
            .subscribe(res => {console.log(res)});

https://stackoverflow.com/a/34107312/1379347借来

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48248775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档