从API解析多个页面

时间:2018-03-07 00:16:26

标签: javascript reactjs react-native

我正在尝试获取格式为JSON的eventbrite的API,问题是JSON只能有50个项目,这意味着Json没有所有信息。 所以在这里 https://www.eventbriteapi.com/v3/events/search/?token=XXX&location.address=Lodnon&page=1&expand=venue

这是API,你可以看到这只是page = 1,它有31页 - 所以我需要page = 1 = 2 = 3 = 4 .... = 31

所以我厌倦了解析所有数据页面,但是进展不顺利

请检查我的代码

export default class Map extends React.Component {
gather(){
let requests = [];
for (let i=1; i<32; i++) {
requests.push(fetch('https://www.eventbriteapi.com/v3/events/search/?
location.address=glasgow&page='+i+'&token=XXX&expand=venue').then(r => 
r.json()));
}
Promise.all(requests).then((responses) => {
   let arr = [];
for (let response of responses) {
for (let event of response.events) {
    //console.log(event)
}

}                                                                                                 } .catch((error)=&gt; {console.error(error);

  });
}

 componentWillMount(){

  this.gather()
}
}

1 个答案:

答案 0 :(得分:0)

您可能应该尝试匹配分页而不是一次性获取所有页面,但如果您真的需要这样做,我认为setState这样做不是一个好主意很多时候 - 理想情况下,你会在最后提出所有请求和setState。像这样:

将所有请求批量转换为承诺数组:

let requests = [];
for (let i=0; i<32; i++) {
  requests.push(fetch('https://www.eventbriteapi.com/v3/events/search/?location.address=glasgow&page='+i+'&token=XXX&expand=venue').then(r => r.json()));
}

立即运行所有请求并等待它们全部完成,然后在所有请求完成后执行setState:

Promise.all(requests).then((responses) => {
  let arr = [];
  for (let response of responses) {
    for (let event of response.events) {
      // extract the event info and add it to the individual arrays/items
      // ...

此外,不确定您的应用程序的结构如何使用此数据,但将它保存在一个对象中可能更容易,而不是为每个对象分别使用单独的数组:

{
  name,
  latitude,
  longitude,
  url
}