首页 > 解决方案 > 递归 axios 调用

问题描述

我正在尝试归还体育部门的所有球队。api如下:

调用/api/divs/ID,返回

例如,我用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(...),但这似乎不是最好的方法。

标签: javascriptnode.jsrecursionecmascript-6promise

解决方案


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)
    })
}

推荐阅读