Angular4:HttpClient - 连续发出许多请求

时间:2017-08-21 13:18:26

标签: angular httprequest

我有一个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)

处理有序列表的最佳方法是什么?我不是很喜欢筑巢

2 个答案:

答案 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);
});