满口金牙 2023-03-25 21:03 采纳率: 91.5%
浏览 18
已结题

api请求多个数据,同步加载的方法,请教

目的, 需要向后端请教多个数据,然后才打开新网页,请教合理的写法



   await API_Member.role({ gr_id: e.id }).then((res) => {
        if (res.data.role !== 'general.admin') {
            throw 'You are not an administrator'
        }
    }).then(() => {
        API_group.info({ gr_id: e.id }).then((res) => {
            groupStore.value = Object.assign(e, res.data)
            console.log('1 groupStore.value', res)
        })
        API_Member.list({ gr_id: e.id }).then((res) => {
            memberStore.value = res.data
            console.log('2 memberStore', memberStore.value)
        })
        API_pmscheme.list({ gr_id: e.id }).then((res) => {
            schemeStore.value = res.data
            console.log('3  schemeStore', schemeStore.value)
        })

    }).then(() => {
        teamDetails.value = true
        loadIcon.value = false
    })

// 上面这样写会出错的,数据没加载完就   teamDetails.value = true 了

// 下面的写法,能完全加载数据,但效率太低, 等待时间太长
请教正确的写法
await API_Member.role({ gr_id: e.id }).then((res) => {
        if (res.data.role !== 'general.admin') {
            throw 'You are not an administrator'
        }
    }).then(() => {
        API_group.info({ gr_id: e.id }).then((res) => {
            groupStore.value = Object.assign(e, res.data)
            console.log('1 groupStore.value', res)
        }).then(() => {
            API_Member.list({ gr_id: e.id }).then((res) => {
                memberStore.value = res.data
                console.log('2 memberStore', memberStore.value)
            }).then(() => {
                API_pmscheme.list({ gr_id: e.id }).then((res) => {
                    schemeStore.value = res.data
                    console.log('3  schemeStore', schemeStore.value)
                }).then(() => {
                    teamDetails.value = true
                    loadIcon.value = false
                })
            })
        })
    })

  • 写回答

1条回答 默认 最新

  • IT_service_mesh 2023-03-25 21:18
    关注

    参考GPT和自己的思路:你可以使用 Promise.all 方法来同时请求多个数据,并且等待它们全部返回才打开新网页。以你的代码为例,可以按照以下步骤进行修改:

    1. 创建三个 API 请求的 Promise 对象:
    const groupInfoPromise = API_group.info({ gr_id: e.id });
    const memberListPromise = API_Member.list({ gr_id: e.id });
    const pmSchemeListPromise = API_pmscheme.list({ gr_id: e.id });
    
    1. 使用 Promise.all 方法,等待三个 Promise 对象全部返回:
    await Promise.all([groupInfoPromise, memberListPromise, pmSchemeListPromise]);
    
    1. 在 Promise.all 返回后,将数据分别存储到不同的变量中:
    const groupInfo = await groupInfoPromise;
    groupStore.value = Object.assign(e, groupInfo.data);
    
    const memberList = await memberListPromise;
    memberStore.value = memberList.data;
    
    const pmSchemeList = await pmSchemeListPromise;
    schemeStore.value = pmSchemeList.data;
    
    1. 最后打开新网页:
    teamDetails.value = true;
    loadIcon.value = false;
    

    完整的修改后的代码如下:

    await API_Member.role({ gr_id: e.id }).then((res) => {
        if (res.data.role !== 'general.admin') {
            throw 'You are not an administrator'
        }
    }).then(async () => {
        const groupInfoPromise = API_group.info({ gr_id: e.id });
        const memberListPromise = API_Member.list({ gr_id: e.id });
        const pmSchemeListPromise = API_pmscheme.list({ gr_id: e.id });
    
        await Promise.all([groupInfoPromise, memberListPromise, pmSchemeListPromise]);
    
        const groupInfo = await groupInfoPromise;
        groupStore.value = Object.assign(e, groupInfo.data);
    
        const memberList = await memberListPromise;
        memberStore.value = memberList.data;
    
        const pmSchemeList = await pmSchemeListPromise;
        schemeStore.value = pmSchemeList.data;
    
        teamDetails.value = true;
        loadIcon.value = false;
    })
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月2日
  • 已采纳回答 3月25日
  • 创建了问题 3月25日

悬赏问题

  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?