微信小程序中使用Async-await方法异步请求变为同步请求方法
程序员文章站
2023-12-03 21:28:58
微信小程序中有些 api 是异步的,无法直接进行同步处理。例如:、wx.showtoast、wx.showloading等。如果需要同步处理,可以使用如下方法:
注意:...
微信小程序中有些 api 是异步的,无法直接进行同步处理。例如:、wx.showtoast、wx.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')
同步处理异步请求
在根目录下新建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) }) }) }, })
参考:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。