流浪的菜袅 2023-10-23 18:45 采纳率: 79.5%
浏览 11
已结题

uniapp中,使用async和await,得到的结果是undefind

哪位大锅帮忙看一下呗
封装的请求:

export const request = (option) => {
        option.url = 'http://localhost:3000/api' + option.url
        option.method = option.method || "Get"  
        option.data =  option.data || {}
        option.header = option.header || {"content-type":"application/json"}
        option.dataType = option.dataType || "json"
        return new Promise((res,rej) => {
            uni.showLoading({
                title: '数据加载中'
            })
            uni.request({
                ...option,
                success:(val) => {
                    if(val.code != 200) {
                        return rej()
                    }
                    const data = val
                    res(data)
                }
            })
            uni.hideLoading()
        })
}

发请求的事件:

methods: {
            async login (){
                try {
                    let form = this.form
                    let newForm = Object.assign({},form)
                    console.log('newForm',newForm);
                    let get = await request({url:`/login/get/accnum/${newForm.username}/${newForm.userpwd}`,method:'get'})
                    console.log('get',get);
                    // let post = await request({url:'/login/post/accnum',method:'post',data:newForm})
                    // console.log('post---------',post);
                } catch(err) {
                    console.log(err);
                }
            }
        },

我用postman试过这个请求是没问题的,但是不知道为什么我使用async await成这样了

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-23 23:35
    关注

    【以下回答由 GPT 生成】

    问题的原因是在封装的request函数中使用了同步的uni.showLoadinguni.hideLoading方法,这会导致异步请求还没有完成就立即隐藏loading动画。

    解决方法可以将uni.showLoadinguni.hideLoading方法放在异步请求的uni.requestsuccess回调函数中,确保在请求成功后再隐藏loading动画。以下是修改后的代码:

    export const request = (option) => {
        option.url = 'http://localhost:3000/api' + option.url
        option.method = option.method || "Get"
        option.data = option.data || {}
        option.header = option.header || {"content-type":"application/json"}
        option.dataType = option.dataType || "json"
        return new Promise((res,rej) => {
            uni.request({
                ...option,
                success: (val) => {
                    uni.hideLoading()
                    if(val.code !== 200) {
                        return rej()
                    }
                    const data = val
                    res(data)
                }
            })
            uni.showLoading({
                title: '数据加载中'
            })
        })
    }
    
    methods: {
        async login (){
            try {
                let form = this.form
                let newForm = Object.assign({},form)
                console.log('newForm',newForm);
                let get = await request({url:`/login/get/accnum/${newForm.username}/${newForm.userpwd}`,method:'get'})
                console.log('get',get);
                // let post = await request({url:'/login/post/accnum',method:'post',data:newForm})
                // console.log('post---------',post);
            } catch(err) {
                console.log(err);
            }
        }
    },
    

    通过将uni.showLoadinguni.hideLoading移动到正确的位置,确保在请求成功后再隐藏loading动画,可以解决返回结果为undefined的问题。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月24日
  • 创建了问题 10月23日

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀