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

uni-app:实现request请求的递归(设置request请求的访问次数),并且调用自定义方法给出返回值

一、效果展示

失败效果

成功效果

二、写入后端请求部分

分析

①自定义一个模块common.js主要用于封装所有的请求函数

②核心代码
function requestWithRetry(cmd, username, password, retryCount) {return new Promise((resolve, reject) => {uni.request({url: ip + 'sys/user/login',data: {cmd: cmd,usrname: username,passwd: password},method: 'POST',dataType: 'json',header: {"content-type": "application/json"},success: res => {// 存入全局变量中getApp().globalData.username = username;getApp().globalData.password = password;getApp().globalData.access_token = res.data.access_token;getApp().globalData.loginmode = loginmode;console.log(`第 ${retryCount} 次请求成功:`, res.data);resolve(res.data);},fail(err) {console.error(`第 ${retryCount} 次请求失败,剩余重试次数 ${retryCount - 1}:`, err)if (retryCount <= 1) {// 重试次数已经用完,将错误信息返回给调用者reject(new Error('请求失败'))} else {// 还有重试次数,继续重试setTimeout(() => {requestWithRetry(cmd, username, password,retryCount - 1).then(resolve).catch(reject)}, 500)}}});});
}
// 调用方法,retryCount 为重试次数
return requestWithRetry(cmd, username, password, 3).then(data => {// console.log('请求成功', data);return data;}).catch(error => {// console.log('请求失败', error);throw error;});


完整代码

//定义全局变量
const ip = 'XXXX';
//定义全局函数
//生成随机三位数 
function generateRandomNumber() {var min = 100;var max = 999;var randomNumber = Math.floor(Math.random() * (max - min + 1) + min);return randomNumber;
}
//http方式进行登录
function login_httpmode(username, password, cmd, loginmode) {//httpif (loginmode == 'http') {function requestWithRetry(cmd, username, password, retryCount) {return new Promise((resolve, reject) => {uni.request({url: ip + 'sys/user/login',data: {cmd: cmd,usrname: username,passwd: password},method: 'POST',dataType: 'json',header: {"content-type": "application/json"},success: res => {// 存入全局变量中getApp().globalData.username = username;getApp().globalData.password = password;getApp().globalData.access_token = res.data.access_token;getApp().globalData.loginmode = loginmode;console.log(`第 ${retryCount} 次请求成功:`, res.data);resolve(res.data);},fail(err) {console.error(`第 ${retryCount} 次请求失败,剩余重试次数 ${retryCount - 1}:`, err)if (retryCount <= 1) {// 重试次数已经用完,将错误信息返回给调用者reject(new Error('请求失败'))} else {// 还有重试次数,继续重试setTimeout(() => {requestWithRetry(cmd, username, password,retryCount - 1).then(resolve).catch(reject)}, 500)}}});});}// 调用方法,retryCount 为重试次数,设置最大次数为三次return requestWithRetry(cmd, username, password, 3).then(data => {// console.log('请求成功', data);return data;}).catch(error => {// console.log('请求失败', error);throw error;});}
}
//导出
module.exports = {ip,generateRandomNumber,login_httpmode,
}

三、进行方法的调用

核心代码

common.login_httpmode(username, password, cmd, type).then(info => {console.log("请求成功",info)		}).catch(error => {console.log("请求失败",error)		});

完整代码

//执行加载中的效果
uni.showLoading({title: '正在登录...',mask: true,
});
//调用登录方法
common.login_httpmode(username, password, cmd, type)//成功返回.then(info => {console.log("请求成功",info)if (info.success == true) {	uni.hideLoading(); // 隐藏加载提示//全局变量中的数据 uni.reLaunch({ //跳转到主页url: '/pages/mine/mine_index/mine_index'})} else {uni.hideLoading(); // 隐藏加载提示if (info.msg == 'pass err') {uni.showToast({title: '账号密码不正确',icon: 'none'})}}}).catch(error => {console.log("请求失败",error)uni.showToast({title: '登录失败',icon: 'none'})});

相关文章:

  • vue3基于vite打包
  • BetterDisplay Pro v2.0.11(显示器颜色校准软件)
  • arm开发板
  • Git-概念与架构
  • Mistral 7B 比Llama 2更好的开源大模型 (四)
  • LeetCode算法题解(动态规划)|LeetCoed62. 不同路径、LeetCode63. 不同路径 II
  • 软考高项知识点 安全技术
  • 【Django-02】 Model模型和模型描述对象Meta
  • ubuntu 20.04安装 Anaconda教程
  • 01 DDD小传:领域驱动设计为什么这么火?
  • python接口自动化测试之接口数据依赖
  • 【python学习】基础篇-常用函数-sorted() 对可迭代对象进行排序
  • clusterProfiler包学习
  • 人工智能基础_机器学习040_Sigmoid函数详解_单位阶跃函数与对数几率函数_伯努利分布---人工智能工作笔记0080
  • Windows10下Maven3.9.5安装教程
  • ----------
  • 深入了解以太坊
  • 〔开发系列〕一次关于小程序开发的深度总结
  • 345-反转字符串中的元音字母
  • C# 免费离线人脸识别 2.0 Demo
  • gf框架之分页模块(五) - 自定义分页
  • SpriteKit 技巧之添加背景图片
  • SQLServer插入数据
  • 百度小程序遇到的问题
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 使用agvtool更改app version/build
  • 推荐一个React的管理后台框架
  • 网络应用优化——时延与带宽
  • 与 ConTeXt MkIV 官方文档的接驳
  • #Linux(帮助手册)
  • #pragma data_seg 共享数据区(转)
  • #大学#套接字
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (实战篇)如何缓存数据
  • (一) springboot详细介绍
  • (一)u-boot-nand.bin的下载
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • .NET Core 和 .NET Framework 中的 MEF2
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .NET建议使用的大小写命名原则
  • .net项目IIS、VS 附加进程调试
  • [ vulhub漏洞复现篇 ] AppWeb认证绕过漏洞(CVE-2018-8715)
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码
  • [AS3]URLLoader+URLRequest+JPGEncoder实现BitmapData图片数据保存
  • [BUG]Datax写入数据到psql报不能序列化特殊字符
  • [BUUCTF]-Reverse:reverse3解析
  • [C++]模板与STL简介
  • [HDU3710]Battle over Cities
  • [hive]中的字段的数据类型有哪些
  • [HTML]Web前端开发技术29(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页
  • [Java、Android面试]_05_内存泄漏和内存溢出
  • [js]js设计模式小结