我的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));
});
});
}
答案 0 :(得分: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));
});
答案 1 :(得分:1)
另一种解决方案是使用mergeMap
运算符
首先导入运营商:
import 'rxjs/add/operator/mergeMap';
然后你可以像这样链接
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)});