Promise should return data after end two for loop

Promise should return data after end two for loop

从API获取数据:

const countries = [
  'Spain',
  'England',
];

const getLeagueID = () => {
  const newData = [];

  return new Promise(resolve => {
    for (let i = 0; i < countries.length; i++) {
      getApi(`https://www.thesportsdb.com/api/v1/json/1/search_all_leagues.php?c=${countries[i]}`)
        .then(({ countrys }) => {
          countrys.forEach((league, index) => {
            if (league.strSport === 'Soccer') {
              const getData = {
                strSport: league.strSport,
                strLeague: league.strLeague,
              };
              newData.push(getData);
            }
            if (index === countrys.length - 1 && i === countries.length - 1) {
              resolve(newData);
            }
          });
        })
        .catch(err => {
          console.log(err);
        });
    }
  });
};

在第一个 for 循环中,我按列表中的国家/地区递增。 当 Api return 数据时,我创建第二个 foreach 方法。在这个方法中,我获取数据并将其推送到 arra newData。问题出在 resolve:

if (index === countrys.length - 1 && i === countries.length - 1) {
    resolve(newData);
}

我不知道怎么写if指令,等待foreach和for循环结束。我的指令如果是错误的,因为不是 return 所有数据。第一次return3条记录,下次7条记录。

这是可行的,但肯定可以改进

const getLeagueID = () => {
    return new Promise((resolve, reject) => {
        const promises = [];
        for (let i = 0; i < countries.length; i++) {
            promises.push(
                getApi(`https://www.thesportsdb.com/api/v1/json/1/search_all_leagues.php?c=${countries[i]}`)
            );
        }
    
        Promise.all(promises)
        .then(res => {
            const newData = [];
            res.map(row => {
                const data = JSON.parse(row);
                const {countrys} = data;
                countrys.forEach((league, index) => {
                    if (league.strSport === 'Soccer') {
                    const getData = {
                        strSport: league.strSport,
                        strLeague: league.strLeague,
                    };
                    newData.push(getData);
                    }
                });
            });
            resolve(newData);
        })
        .catch(err => {
            console.log(err);
            reject(err);
        });
    });
  }