【问题标题】:Parsing more than one page from API从 API 解析多个页面
【发布时间】:2018-03-07 00:16:25
【问题描述】:

我正在尝试获取格式化为 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) => { console.error(error);

  });
}

 componentWillMount(){

  this.gather()
}
}

【问题讨论】:

    标签: javascript reactjs react-native


    【解决方案1】:

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

    将所有的请求打包成一个 Promise 数组:

    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
    }
    

    【讨论】:

    • 您好,感谢您回答我,我得到 undefined is not an object(evalating '_iterator2[tydeofsymbol=="function"?].,,
    • 当我打印出 response 它检索一堆 [object , object] ,当我打印出 response.events 时,它说 undeifned
    • @user9375305 您拥有的新代码似乎对我有用,当我执行console.log(event.url); 时,我会从 api 中得到一堆带有 url 的结果。还记得把你的访问令牌放回网址,我用XXX替换它以保持私密。
    • 哦,是的,对不起,我没注意到 XXX……非常感谢!
    • 您介意使用分页编写代码吗?我想我需要分页......仍然不确定实施......
    猜你喜欢
    • 2017-06-02
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-01
    相关资源
    最近更新 更多