注意:我知道我可能做错了这方面的方法,并且希望获得有关更好编写它的任何建议。
我有一个函数,当给定用户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)
两行以后没有输出任何内容。
您能解释为什么会这样,并建议一种更好的编写整个函数的方法吗?谢谢
答案 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)