我的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));
});
});
}发布于 2018-01-14 10:49:47
do()操作符只用于做副作用,它根本不修改正在通过的值。
在您的示例中,您可以使用concatMap()合并两个可观察到的值,并使用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));
});发布于 2018-01-14 10:57:28
另一种解决方案是使用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)});https://stackoverflow.com/questions/48248775
复制相似问题