当前位置: 首页 > ds >正文

使用 async/await 封装 wx.request 请求

关于微信小程序开发中的接口请求封装。

下面是一个使用 async/await 方式封装 wx.request 的完整实现,包含登录超时(401)和404等常见错误的处理逻辑:

// 封装请求方法
const request = (options) => {return new Promise((resolve, reject) => {const defaultOptions = {method: 'GET',header: {'content-type': 'application/json','Authorization': wx.getStorageSync('token') || ''},timeout: 10000 // 10秒超时};const requestOptions = { ...defaultOptions, ...options };wx.request({...requestOptions,success: (res) => {const { statusCode, data } = res;if (statusCode === 401) {handleUnauthorized();reject(new Error('登录状态已过期,请重新登录'));return;}if (statusCode === 404) {reject(new Error('请求的资源不存在'));return;}if (statusCode >= 200 && statusCode < 300) {resolve(data);} else {reject(new Error(`请求失败,状态码: ${statusCode}`));}},fail: (err) => {if (err.errMsg.includes('timeout')) {reject(new Error('请求超时,请检查网络连接'));} else {reject(new Error('网络错误,请检查网络连接'));}}});});
};// 处理未授权
const handleUnauthorized = () => {wx.removeStorageSync('token');wx.showModal({title: '提示',content: '登录已过期,请重新登录',showCancel: false,success: () => {wx.redirectTo({url: '/pages/login/login'});}});
};// 封装的API请求方法(使用async/await)
const fetchData = async () => {try {// 使用await等待请求完成const response = await request({url: 'https://api.example.com/data',method: 'GET'});console.log('请求成功', response);return response;} catch (error) {console.error('请求失败:', error.message);wx.showToast({title: error.message,icon: 'none'});throw error; // 可以选择继续抛出错误或处理}
};// 使用示例
const getData = async () => {try {const data = await fetchData();// 处理数据...} catch (error) {// 错误处理...}
};// 页面中调用
Page({async onLoad() {try {const result = await fetchData();this.setData({ list: result.data });} catch (error) {// 页面特定的错误处理}}
});

http://www.xdnf.cn/news/12362.html

相关文章:

  • NLP学习路线图(二十五):注意力机制
  • 会计 - 金融负债和权益工具
  • NC | 基于语言模型的药物设计新方法
  • jenkins脚本查看及备份
  • AppTrace技术全景:开发者视角下的工具链与实践经验
  • 人工智能的社交课:从博弈游戏到健康关怀
  • .Net Framework 4/C# LINQ*
  • Python----目标检测(yolov5-7.0安装及训练细胞)
  • 国芯思辰|SCS5501/5502芯片组打破技术壁垒,重构车载视频传输链路,兼容MAX9295A/MAX96717
  • Python爬虫实战:研究RoboBrowser库相关技术
  • [大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
  • 国内头部的UWB企业介绍之品铂科技
  • 关于根据词库分词的算法逻辑实现(最长词汇匹配原则)
  • 6月5日day45
  • 《Pytorch深度学习实践》ch8-多分类
  • 空间利用率提升90%!小程序侧边导航设计与高级交互实现
  • 【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信拓扑与操作 BR/EDR(经典蓝牙)和 BLE
  • 从0开始学习R语言--Day17--Cox回归
  • 深度学习张量
  • Postman接口测试之postman设置接口关联,实现参数化
  • selinux firewalld
  • 将HTML内容转换为Canvas图像,主流方法有效防止文本复制
  • RunnablePassthrough介绍和透传参数实战
  • Kinova机械臂在Atlas手术导航系统中的核心作用
  • 外网访问内网服务器常用的三种简单操作步骤方法,本地搭建网址轻松让公网连接
  • java32
  • Monorepo架构: Lerna、NX、Turbo等对比与应用分析
  • ubuntu24.04 搭建 java 环境服务,以及mysql数据库
  • Spring Boot 启动流程及配置类解析原理
  • Jenkins实现自动化部署Springboot项目到Docker容器(Jenkinsfile)