微信小程序中使用Async-await方法异步请求变为同步请求
微信小程序中有些 Api 是异步的,无法直接进行同步处理。例如:wx.request、wx.showToast、wx.showLoading等。如果需要同步处理,可以使用如下方法:
注意:
Async-await方法属于ES7语法,在小程序开发工具中如果勾选es6转es5, 会报错:
ReferenceError: regeneratorRuntime is not defined
避免报错,可以引入 regenerator
-
在根目录下创建 lib 文件夹,并将 https://github.com/facebook/regenerator/tree/master/packages 里面的 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)
})
})
},
})
👉 友情推荐
新开发的小程序,功能包括诗词大全、成语接龙、百家姓、猜字谜、歇后语,欢迎扫码预览:

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构