javascript - 递归 axios 调用
问题描述
我正在尝试归还体育部门的所有球队。api如下:
调用/api/divs/ID
,返回
- 细分列表 (
.divInfo
) - 该部门的球队名单 (
.teams
)
例如,我用Division 1
( 55720
) 调用它,它给了我所有的地区以及几个团队。
从任何一个部门,我都在尝试收集该部门的完整团队列表,包括细分。
这是我的代码:
async getSubteams(id) {
let vm = this
return await this.$axios.get(`/api/div/${id}`).then(r => {
let additionalTeams = r.data.divInfo.map(subDivision => vm.getSubteams(subDivision.DivIDDivision))
return r.data.teams.concat(...additionalTeams)
})
}
const teams = await this.getSubteams(this.id)
这并没有给我一个团队对象列表的预期输出。相反,它是 Promises 和团队的混合体。
我知道这是错误的编程,但是我如何在获得没有承诺的正常列表的同时保持其异步性(即同时发生多个 api 调用)。
我曾讨论过返回承诺然后使用Promises.all(...)
,但这似乎不是最好的方法。
解决方案
Promise.all
是关键。
async getSubteams(id) {
let vm = this
return await this.$axios.get(`/api/div/${id}`).then(async r => {
let additionalTeams = await Promise.all(r.data.divInfo.map(subDivision => {
return vm.getSubteams(subDivision.DivIDDivision)
}))
return r.data.teams.concat(...additionalTeams)
})
}
推荐阅读
- amazon-web-services - AWS Redshift:在 sql 代码中隐藏凭证
- .net-core - 如何从 CRM 2016 填充的 Microsoft.Azure.ServiceBus 队列中读取
- php - 网站加载不会停止
- python - Tkinter autoreload 函数每次调用时都会产生新的循环
- amazon-web-services - 使用 Grant-EC2SecurityGroupIngress 时如何添加说明?
- javascript - Why isn't my try catch error not showing up?
- javascript - 用空格填充后如何在 JavaScript 中清空(重置)输入类型电子邮件(in.value="" 不起作用)
- java - Java如何链接通知和轮询
- r - CRAN 有空包吗
- javascript - 使用 document.write() 进行值门控在 php where 条件下不起作用