我正在使用Riot Games API构建应用程序,我想检索给定玩家玩的所有比赛。
这是检索此类数据的途径:
/lol/match/v3/matchlists/by-account/{accountId}
问题在于,每个请求的API限制为100个结果,因此,如果要检索所有匹配项(我的情况),则必须使用附加参数beginIndex
执行一系列请求以指定响应的初始位置。
所以我有一个函数接收(index,accountId,region)
并执行查询以返回结果作为承诺:
const request = (beginIndex, accountId, region) =>{
const key = '&api_key=mykey';
const path = 'https://' + region + '.api.riotgames.com/lol/match/v3/matchlists/by-account/' + accountId +'?beginIndex=' + beginIndex;
return new Promise(resolve =>{
axios.get(path+key)
.then(response => resolve(response.data.matches))
.catch(err => console.log(err))
})
另一个发出初始请求的函数,比较结果的length
是否为100,如果是,它将连续调用request()
并获取数据,直到length
变为小于100,表示它已到达最后一页。然后返回包含所有数据的数组:
const expand = async(id,index=0,lastSize=0) =>{
const initialRequest = await request(index,id,'br1');
if(initialRequest.length < 100)
return initialRequest;
let allMatches = initialRequest;
lastSize = initialRequest.length;
while(lastSize === 100){
index += 100;
let partialResult = await request(index,id,'br1');
allMatches = allMatches.concat(partialResult);
console.log(allMatches.length);
lastSize = partialResult.length;
}
return allMatches.map(match => match.timestamp);
效果很好,我正在检索所有者进行的所有比赛,但是我感觉我在表现方面做得非常错误。我有很多嵌套的请求,这不好。因此,我想问您关于如何更好地执行此任务的意见?