我正在尝试获取格式为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()
}
}
答案 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
}