我有一个函数返回matchId数组,还有一个函数根据matchID从macth返回数据对象
async function getMatchData(matchId){
const response = await fetch(`https://europe.api.riotgames.com/lol/match/v5/matches/${matchId}?api_key=`+key);
var data = await response.json();
let matchData= {
teams: data.info.teams.map(element => team = { teamid: element.teamId, win: element.win }),
players: data.info.participants.map(element => obj = { team: element.teamId, champ: element.championName, champIcon: element.championName + '_0.jpg', summoner: element.summonerName, level: element.champLevel, build: { item1: element.item1, item2: element.item2, item3: element.item3, item4: element.item4, item5: element.item5, item6: element.item6, item0: element.item0 }, kills: element.kills, deaths: element.deaths, assists: element.assists, kda: (element.kills + element.assists) / element.deaths, cs: element.totalMinionsKilled + element.neutralMinionsKilled, victory: element.win })
}
return matchData
现在,我想使用matchIds数组中的每个matchId作为getMatchData函数中的参数,并将每个响应放入数组或对象中
我尝试使用map遍历数组,但它返回[ Promise { },Promise { },...]并显示:无法读取未定义的属性(阅读“teams”)
let matchHistoryData= matches.map(element=>getMatchData(element))
console.log(matchHistoryData);
matches是matchId的数组
1条答案
按热度按时间toiithl61#
您的问题已更改,以下是更新后问题的答案:
由于
getMatchesData
是一个async
函数,它肯定会返回一个promise对象,因此.map()
调用必定会返回一个promise数组。由于这些承诺只会在将来解决--当这些
await
-艾德承诺解决,并且matchData
赋值得到执行时--您将需要侦听异步代码以便在它们解决时执行。请注意,任何其他需要
matchHistoryData
的代码都需要在then
回调内运行,或者从那里调用(或者链接到另一个then
回调中,...)。