json 有没有一种方法可以将数组的每个值用作函数参数,然后将每个结果存储在另一个数组或对象中?

tyg4sfes  于 2023-03-20  发布在  其他
关注(0)|答案(1)|浏览(94)

我有一个函数返回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的数组

toiithl6

toiithl61#

您的问题已更改,以下是更新后问题的答案:
由于getMatchesData是一个async函数,它肯定会返回一个promise对象,因此.map()调用必定会返回一个promise数组。
由于这些承诺只会在将来解决--当这些await-艾德承诺解决,并且matchData赋值得到执行时--您将需要侦听异步代码以便在它们解决时执行。

Promise.all(matches.map(element=>getMatchData(element)))
       .then(matchHistoryData => {
           console.log(matchHistoryData);
       });

请注意,任何其他需要matchHistoryData的代码都需要在then回调内运行,或者从那里调用(或者链接到另一个then回调中,...)。

相关问题