我有一个http get请求来获取Feed中某些项目的列表。 feed API需要一个页面参数,限制为20.我想获得前60,所以我需要发出3个请求
requestOptions.params.set('page', 1);
this.http.get(environment.api+ '.feed.json', requestOptions)
requestOptions.params.set('page', 2);
this.http.get(environment.api+ '.feed.json', requestOptions)
requestOptions.params.set('page', 3);
this.http.get(environment.api+ '.feed.json', requestOptions)
处理有序列表的最佳方法是什么?我不是很喜欢筑巢
答案 0 :(得分:1)
您的服务:
getPage(page) {
/*init requestOptions*/
requestOptions.params.set('page', page);
return this.http
.get(environment.api+ '.feed.json', requestOptions)
.map(/*map your object to the expected one*/)
.catch(/*catch any http exception*/);
}
您致电服务的地方
let allPages = [];
Observable.forkJoin(
this.service.getPage(1);
this.service.getPage(2);
this.service.getPage(3);
).subscribe((respArray) =>{
allPages = allPages.concat(respArray[0]);
allPages = allPages.concat(respArray[1]);
allPages = allPages.concat(respArray[2]);
});
Object.forkJoin
将等待所有请求完成,然后您可以使用此结果构建单个列表;
答案 1 :(得分:1)
有很多方法可以做到这一点。我通常使用Observable.forkjoin or Observable.merge
你可以用以下方式做到这一点。调整代码以便运行
// white a method which will call and get data and return observable
getData(pageNumber, requestOptions, environment) {
requestOptions.params.set('page', pageNumber);
return this.http.get(environment.api+ '.feed.json', requestOptions)
}
// make a fork-join/merge of all the observable and append the results
Observable.forkJoin(
getData(pageNumber, requestOptions, environment);
getData(pageNumber, requestOptions, environment);
getData(pageNumber, requestOptions, environment);
).subscribe( (steream) => {
//put some condition and all all those data
result.push(stream);
});