Angular 4嵌套的http调用和合并数据

say*_*tri 2 rxjs rxjs5 angular

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

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));
        });
  });
}
Run Code Online (Sandbox Code Playgroud)

mar*_*tin 6

do()运营商意在只能做的副作用,它不修改打算通过在所有的值.

在您的情况下,您可以使用concatMap()合并两个Observable并map()修改内部值的发射值:

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));
  });
Run Code Online (Sandbox Code Playgroud)