注意:我知道我可能以错误的方式这样做,并且我希望获得有关更好地编写它的建议。
我有一个函数,当给定用户 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/