uni-app中使用 async + await 实现异步请求同步化

问题:
在uni-app中,uni.request等网络请求都是异步的,直接使用可能会导致页面渲染完毕时,数据还未成功获取的情况。
解决方法:

<script>
export default {
    data() {
        return {};
    },
    methods:{
        getOutInfo(){ 
            return new Promise((resolve, reject) => {
                uni.request({ 
                    url : `请求地址`,
                    method : "GET",
                    data : {},
                    success: (res) => {
                        console.log(res)
                        resolve('suc');  // 千万别忘写!!!
                    },
                    fail:(err)=>{
                        reject('err')
                    }
                })
            })
        },
        async mountDealCount(){
            await this.getOutInfo()
            console.log('我在数据获取之后执行')
        }
    },
    beforeMount(){
        this.mountDealCount()
    }
}
</script>

   

效果:
在这里插入图片描述
注意:当调用的级数增加的时候,需要逐级的增加async和await

<script>
export default {
    methods:{
        getOutInfo(){ 
            return new Promise((resolve, reject) => {
                uni.request({ 
                    url : `请求地址`,
                    method : "GET",
                    data : {},
                    success: (res) => {
                        console.log(res)
                        resolve('suc');  // 千万别忘写!!!
                    },
                    fail:(err)=>{
                        reject('err')
                    }
                })
            })
        },
        async dealInfo(){
            await this.getOutInfo()
            console.log('我在数据获取之后执行')
        },
        async loadDeal(){
            await this.dealInfo()
            console.log('我在 dealInfo 之后执行')
        }
    },
    beforeMount(){
        this.loadDeal()
    }
}
</script>

总结:

    将uni.request请求封装在Promise构造函数中;
    使用async + await;

发表评论

电子邮件地址不会被公开。 必填项已用*标注