微信小程序——异步请求使用async/await实现同步

这篇具有很好参考价值的文章主要介绍了微信小程序——异步请求使用async/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,微信小程序,微信小程序,小程序

 文章来源地址https://www.toymoban.com/news/detail-673759.html

到了这里,关于微信小程序——异步请求使用async/await实现同步的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序入门与实战之缓存机制与异步API的async和awai

    App.js写逻辑内容,内置有函数,有三大作用 1、判断用户以什么方式进入小程序 2、获取用户信息 3、定义全局数据 每个小程序都需要在 app.js 中调用 App 方法注册小程序实例,绑定生命周期回调函数、错误监听和页面不存在监听函数等。 在app.js中设置全局变量: 在具体页面的

    2024年02月12日
    浏览(39)
  • Unity C# 之 使用 HttpWebRequest 基础知识/HttpWebRequest 进行异步Post 网络访问/数据流形式获取数据(Task/async/await)的代码简单实现

    目录 Unity C# 之 使用 HttpWebRequest 基础知识/HttpWebRequest 进行异步Post 网络访问/数据流形式获取数据(Task/async/await)的代码简单实现 一、简单介绍 二、实现原理 三、注意事项 四、效果预览 五、关键代码 附录 : HttpWebRequest 的一些基础知识 1、HttpWebRequest 常用属性 2、HttpWebRequest 

    2024年02月05日
    浏览(60)
  • 什么是Promise对象?它的状态有哪些?如何使用Promise处理异步操作?以及 async、await

    前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一

    2024年02月11日
    浏览(46)
  • Unity中的异步编程【5】——在Unity中使用 C#原生的异步(Task,await,async) - System.Threading.Tasks

    1、System.Threading.Tasks中的Task是.Net原生的异步和多线程包。 2、UniTask(Cysharp.Threading.Tasks)是仿照.Net原生的Task,await,async开发的一个包,该包专门服务于Unity,所以取名UnityTask,简称UniTask。 3、既然有Task了,为啥还要搞一个UniTask (1)Task可以用在PC和Android上,但是在WebGL上则会

    2023年04月17日
    浏览(51)
  • promise及异步编程async await

    ECMAScript 6 新增了正式的 Promise(期约)引用类型,支持优雅地定义和组织异步逻辑。接下来几个版本增加了使用 async 和 await 定义异步函数的机制 JavaScript 是单线程事件循环模型。异步行为是为了优化因计算量大而时间长的操作,只要你不想为等待某个异步操作而阻塞

    2024年02月04日
    浏览(42)
  • 【前端】浅谈async/await异步传染性

    \\\"异步传染性\\\"问题通常是指,当一个函数使用了async和await,其调用者也需要使用async和await处理异步操作,导致整个调用链都变成异步的。这种情况可能导致代码变得更复杂,不易维护。 类似于C# try catch的层层上抛,在某一层catch 查了很多资料 ,对于这个问题说法还都不一样

    2024年01月23日
    浏览(45)
  • 微信小程序异步请求数据 parmise方法

    在小程序中可以直接使用promise,我们需要做的就是在A函数中返回一个promise,在返回的promise中再进行获取数据的操作,把成功获取到的数据传入resolve中,把失败的结果传入reject,然后在B函数中调用A函数,调用后再使用.then 和 .catch 分别对成功和失败的结果进行处理  

    2024年02月12日
    浏览(40)
  • 微信小程序异步请求数据promise方法

    在小程序中可以直接使用promise,我们需要做的就是在A函数中返回一个promise,在返回的promise中再进行获取数据的操作,把成功获取到的数据传入resolve中,把失败的结果传入reject,然后在B函数中调用A函数,调用后再使用.then 和 .catch 分别对成功和失败的结果进行处理

    2024年02月06日
    浏览(46)
  • HarmonyOS通过async与await同异步转换 解决异步回调地狱

    我在 HarmonyOS 发送http网络请求 中讲述了 HTTP请求的基本方式 然后 就带出了 回调地狱的问题 然后 上文 HarmonyOS 通过Promise 解决异步回调地狱问题 我们用Promise的解决方案 搞定了 这个问题 但是 Promise 这种写法 可读性其实没有那么优秀 没有搞定 Promise return规则的人甚至都看不懂

    2024年01月24日
    浏览(48)
  • 消灭异步回调,还得是 async-await

    关于异步处理问题,ES5的回调让我们陷入回调地狱轮回,后来ES6的Promise(Promise不了解?点这了解[1])让我们脱离轮回,终于,ES7的async-await带我们走向光明。今天我们就来学习一夏 async-await,看看与Promise有何联系和区别。 一、走进Async-await原理 1、原理1 async函数返回一个

    2024年02月10日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包