微信小程序——异步请求使用async/await实现同步_微信小程序 await-优快云博客

        在小程序的开发中,我们知道网络请求wx.requset是一个异步请求的API,当我们使用它时,会出现请求还没有结束,我们下面写的处理数据的代码就已经执行了从而导致了我们写的程序出现问题,那么我们该怎么解决这个问题呢?今天我们用async/await来实现一下吧。

        在小程序中,我们的async/await要与promise一起搭配使用才能有异步变同步的效果。

一、封装promise的请求

request.js

function post(url, data = {}) {
  return new Promise(function (resolve, reject) {
    wx.request({
      method: "POST",
      url: url,
      data: data,
      success(res) {
        resolve(res);
      },
      fail(err) {
        reject(err)
      }
    })
  })
}
module.exports = {
  post:post
}

        我们这里封装的是一个post请求的promise工具类,当然get请求也是一样的封装方法,可以根据具体的使用情况对本代码进行一些更改。

        这里我们封装的工具类需要传递的信息是网络请求链接和需要给到接口的请求数据。

二、封装储存接口的工具类

        此工具类是为了方便开发者对接口的链接进行统一管理

link.js

module.exports = {
  test: 'your link'
}

        在使用时只需要将此工具类引入,然后拿到对应接口的名字即可。

三、使用方法

const request = require('../../utils/request.js')
const url = require('../../utils/link.js')
Page({

  /**
   * 页面的初始数据
   */
  data: {

  },

  async abc() {
    const { data: res } = await request.post(url.test, data)
    console.log(res);
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    this.abc();
  },
})

        在此处我们引入两个工具类之后,在函数abc就可以使用网络请求的异步变同步了,只需要在请求request之前给上一个await,在函数之前给上一个async就可以实现异步请求变同步请求了,这里的console.log()是在请求返回数据之后才会进行打印操作的,这里我们也使用了解构赋值,将拿到的数据里面data的数据重新命名为res返回给开发者,这也是一个小tip!

四、原因

        在微信小程序中,网络请求默认使用的是异步的回调方式来处理请求的结果。这是因为在小程序的 JavaScript 运行环境中,不支持直接使用 async/await来处理异步操作。

        await关键字需要在异步函数中使用,而网络请求的回调函数并不属于异步函数。因此,如果直接在网络请求的回调函数中使用await,是无法正确得到结果的,因为它会在同步上下文中执行,而不是等待异步操作完成。

        为了在微信小程序中使用await来处理网络请求,一种常见的做法是封装网络请求的回调函数为 Promise 对象,并使用 async/await来处理这个 Promise 对象。

结尾:样例小程序二维码,我自己做的一个免费好用的【随机选择决定转盘工具】小程序,欢迎扫码体验呦!

谢谢阅读!~~

微信小程序中的async/await是一种用于处理异步操作的特性。它可以使异步代码看起来更加直观和舒适。然而,默认情况下,"微信开发者工具"并不支持async/await。但你可以启用它的方法是在微信开发者工具的设置中勾选"增强编译"选项。这样一来,你就可以在小程序使用async/await了。 在微信小程序中,有很多接口是异步调用的,比如wx.login()、wx.request()、wx.getUserInfo()等。你可以使用async/await来处理这些异步操作。具体的使用方法如下: 1. 在需要使用async/await的函数前面加上async关键字,这样函数就变成了异步函数。 2. 在需要等待的异步操作之前使用await关键字,这样代码会等待异步操作完成后再继续执行。 3. 在异步函数的外部使用try/catch块来捕获可能的异步操作异常。 下面是一个使用async/await的示例代码: ```javascript async function getData() { try { const res = await wx.request({ url: 'https://api.example.com/data', method: 'GET' }); console.log(res.data); } catch (error) { console.error(error); } } ``` 这个示例中,使用async关键字声明了一个异步函数getData(),在函数内部使用await关键字等待wx.request()方法返回的数据。如果请求成功,就会打印出返回的数据;如果请求失败,就会打印出错误信息。 在实际开发中,你可以根据需要将异步操作封装成函数,然后在需要的地方调用这些函数使用async/await来处理异步操作。这样可以使代码更加简洁和易于维护。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [在微信小程序使用 async/await](https://blog.csdn.net/z591102/article/details/107511702)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [微信小程序使用 async/await的方法实例分析](https://download.csdn.net/download/weixin_38592455/13132396)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

neter.asia

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值