javascript - 在 forEach 中连续进行 AJAX 调用 - 为什么我看不到结果?

标签 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) 两行后不输出任何内容。

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

最佳答案

试试这个:

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)

关于javascript - 在 forEach 中连续进行 AJAX 调用 - 为什么我看不到结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55749040/

相关文章:

javascript - 函数不是第一次触发

jquery - Symfony2 : JQuery request isn't XHR

javascript - 如何显示上传进度 jQuery、Ajax、PHP

javascript - 使用评估的变量值而不是实际类型

javascript - 限制IE8获取css文件

javascript - 如何将事件绑定(bind)到本地 iframe 内的元素?

javascript - 如何在窗口关闭时从JS弹出窗口中获取数据

javascript - 将文件上传到Google文档

javascript - 将 st、th、rd 添加到 jQuery 日期

javascript - Keystone.js : use one model in multiple sites