欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

微信小程序中使用Async-await方法异步请求变为同步请求方法

程序员文章站 2023-11-12 17:58:28
微信小程序中有些 api 是异步的,无法直接进行同步处理。例如:、wx.showtoast、wx.showloading等。如果需要同步处理,可以使用如下方法: 注意:...

微信小程序中有些 api 是异步的,无法直接进行同步处理。例如:、wx.showtoastwx.showloading等。如果需要同步处理,可以使用如下方法:

注意:

async-await方法属于es7语法,在小程序开发工具中如果勾选es6转es5, 会报错:

referenceerror: regeneratorruntime is not defined

避免报错,可以引入

在根目录下创建 lib 文件夹,并将 里面的 regenerator-runtime 文件夹放进去。

然后在使用async-awiat的页面中引入:

// pages/list/list.js

const regeneratorruntime = require('../../lib/regenerator-runtime/runtime')

微信小程序中使用Async-await方法异步请求变为同步请求方法

同步处理异步请求

在根目录下新建api文件夹,里面新建index.js

// request get 请求
const getdata = (url, param) => {
 return new promise((resolve, reject) => {
 wx.request({
  url: url,
  method: 'get',
  data: param,
  success (res) {
  console.log(res)
  resolve(res.data)
  },
  fail (err) {
  console.log(err)
  reject(err)
  }
 })
 })
}

// request post 请求
const postdata = (url, param) => {
 return new promise((resolve, reject) => {
 wx.request({
  url: url,
  method: 'post',
  data: param,
  success (res) {
  console.log(res)
  resolve(res.data)
  },
  fail (err) {
  console.log(err)
  reject(err)
  }
 })
 })
}

// loading加载提示
const showloading = () => {
 return new promise((resolve, reject) => {
 wx.showloading({
  title: '加载中...',
  mask: true,
  success (res) {
  console.log('显示loading')
  resolve(res)
  },
  fail (err) {
  reject(err)
  }
 })
 })
}

// 关闭loading
const hideloading = () => {
 return new promise((resolve) => {
 wx.hideloading()
 console.log('隐藏loading')
 resolve()
 })
}

module.exports = {
 getdata,
 postdata,
 showloading,
 hideloading
}

在入口文件 app.js 中引入:

//app.js 
const api = require('./api/index')

app({
 onlaunch: function () {
 
 },
 // 全局数据中暴露api
 globaldata: { 
 api
 }
})

在需要使用api 的页面中处理如下:

// pages/list/list.js
const app = getapp()

const api = app.globaldata.api

page({
 
 onload () {
 this.init()
 },

 // 初始化
 async init () {
 await api.showloading() // 显示loading
 await this.getlist() // 请求数据
 await api.hideloading() // 等待请求数据成功后,隐藏loading
 },

 // 获取列表
 getlist () {
 return new promise((resolve, reject) => {
  api.getdata('http://127.0.0.1:3000/list', {
   x: '',
   y: ''
  }).then((res) => {
  this.setdata({
   list: res
  })
  console.log(res)
  resolve()
  })
  .catch((err) => {
   console.error(err)
   reject(err)
  })
 })
 },
 
})

参考:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。