AJAX连续调用forEach-为什么我看不到结果?

时间:2019-04-18 15:15:18

标签: javascript jquery ajax

注意:我知道我可能做错了这方面的方法,并且希望获得有关更好编写它的任何建议。

我有一个函数,当给定用户ID时,它会调用两个API以获取 1. userid所在的所有联赛的列表。 2.每个联盟中所有用户的列表。

$.ajax({
  type: "get",
  url: "/api/user/" + userID,
  dataType: "json",
  success: function(response) {
    response.leagues.classic.forEach(element => {
      if (element.short_name == null) {
        myLeagues.push(element.id);
      }
    });

  }
}).then(function() {
  myLeagues.forEach(leagueid => {
    $.ajax({
      type: "get",
      url: "/api/league/" + leagueid,
      dataType: "json",
      success: function(response) {
        if (response.standings.results.length < 30) {
          response.standings.results.forEach(element => {
            myOpponents.push(element.player_name)
          });
        }
      }
    });
  })
}).then(function() {
  console.log(myOpponents);
  myOpponents.forEach(opponent => {
    console.log(opponent)
  });
})

console.log(myOpponents)输出一个与所有对手相对应的数组

console.log(opponent)两行以后没有输出任何内容。

您能解释为什么会这样,并建议一种更好的编写整个函数的方法吗?谢谢

1 个答案:

答案 0 :(得分:1)

尝试一下:

async function someFunc(userID) {
  let myLeagues = [];
  let myOpponents = [];

  try {
    const results = await $.ajax({
      type: "get",
      url: "/api/user/" + userID,
      dataType: "json"
    });

    results.forEach(element => {
      if (element.short_name == null) {
        myLeagues.push(element.id);
      }
    });

    let leagues = myLeagues.map(leagueid => {
      return $.ajax({
        type: "get",
        url: "/api/league/" + leagueid,
        dataType: "json"
      })
    })

    let leagueDatas = await Promise.all(leagues);

    leagueDatas.forEach(val => {
      if (val.standings.results.length < 30) {
        val.standings.results.forEach(element => {
          myOpponents.push(element.player_name)
        });
      }
    })

    myOpponents.forEach(opponent => {
      console.log(opponent)
    });
  } catch (e) {
    // handle error
  }
}
someFunc(1)