uni-app 中通过 async + await + Promise 实现 request 请求同步化

一、前言

在 uni-app 中 uni.request 默认是异步请求,那么如果我们想将其改为同步请求可以吗?显然是可以的!我们可以借助 Promise 结合 async + await 使请求同步化。具体步骤如下:

二、基于 Promise 对 request 请求进行封装

请参考之前的文章:uni-app 基于 Promise 的 request 请求封装。

三、使用 async + await,使异步请求同步化

<script>
    import http from '@/commons/http.js'

    export default {
        data() {
            return {
            }
        },
        methods: {
            async loadData1 (id) {
                await http('data/get1', {
                    id: id
                }).then(res => {
                    console.log(res.data)
                }).catch(err => {
                    console.error(err)
                })
            },
            async loadData2 (id) {
                await http('data/get2', {
                    id: id
                }).then(res => {
                    console.log(res.data)
                }).catch(err => {
                    console.error(err)
                })
            }
        },
        async onLoad(option) {
            await this.loadData1(1)
            await this.loadData1(2)
        }
    }
</script>

四、注意

  • 注意:当调用的级数增加的时候,需要逐级的增加 async 和 await。

五、他山之石

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Promiseasync和awaitJavaScript用于处理异步操作的关键字。它们的实现原理如下: 1. PromisePromise是一种表示异步操作的对象,它包含三种状态(pending、fulfilled、rejected)。当一个异步操作完成时,Promise可从pending状态转变为fulfilled状态,表示操作成功;或者从pending状态转变为rejected状态,表示操作失败。Promise提供了then方法来处理操作的结果,并可以进行链式调用。 2. async/awaitasync函数是Generator函数的一种语法糖,用来简化异步操作的处理。通过在函数前添加async关键字,函数返回值将被自动封装成Promise对象。await关键字只能在async函数使用,用于暂停async函数的执行,等待Promise对象的状态改变后再继续执行。当await后面的异步操作完成时,它会返回Promise对象的结果。 下面以一个获取用户信息的案例来分析Promiseasync和await的用法: 使用Promise实现: ``` function getUserInfo() { return new Promise((resolve, reject) => { setTimeout(() => { const user = { name: 'John', age: 25 }; resolve(user); }, 1000); }); } getUserInfo() .then(user => { console.log(user); }) .catch(error => { console.error(error); }); ``` 使用async/await实现: ``` function getUserInfo() { return new Promise((resolve, reject) => { setTimeout(() => { const user = { name: 'John', age: 25 }; resolve(user); }, 1000); }); } async function displayUserInfo() { try { const user = await getUserInfo(); console.log(user); } catch (error) { console.error(error); } } displayUserInfo(); ``` 以上两种方式都可以获取用户信息,并在操作完成后打印到控制台。使用async/await可以使代码看起来更加简洁和易读。通过在async函数内部使用await关键字,可以将异步操作的代码写成类似同步代码的形式,提高了代码的可读性和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值