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

uniapp uni.request重复请求处理

类似这种切换tab时,如果操作很快并且网络不太好,就出现数据错乱,在网上查了一圈,有一个使用uview拦截处理的,但是原生uni.requse没有找到详细的解决办法,就查到使用 abort 方法,我自己封装了一个,试了一下效果还可以。

request.js 

const pending = [];    // 用来记录队列中的请求

// 判断是否有重复的请求并移除
let removePending = (config) => {
	for (let p = 0; p < pending.length; p++) {
		console.log(pending[p]);
		if (pending[p].u === config.url?.split("?")[0] + "&" + config.method) {
			//当当前请求在数组中存在时执行函数体
			pending[p].requestTask.abort();
			pending.splice(p, 1); //数组移除当前请求
		}
	}
};

export function request(options) {
	return new Promise((reslove, reject) => {
        // 每次发送请求之前判断一下
		removePending(options);
		const requestTask = uni.request({
            ...,
			complete: (res) => {
				// 从请求队列中移除已经执行完成的请求
				const excutingIndex = pending.findIndex(item => item.requestTask === requestTask)
				pending.splice(excutingIndex, 1)
			}
		})
        //把请求加入队列数组中
		pending.push({
			u: options.url?.split("?")[0] + "&" + options.method,
			requestTask: requestTask,
		});
	})
}

相关文章:

  • “以数治税”时代 数据要素的价值挖掘
  • C 指针和整数的加减法运算
  • 六、soul源码学习-SpringCloud项目本地运行
  • 【核心算法篇十七】《深度解析DeepSeek概率图模型:贝叶斯网络推理引擎的技术内核》
  • 【如何基于Debian构建Kali Linux】
  • Linux-进程概念
  • 配置haproxy实现MySQL服务器负载均衡
  • 【技术前沿】中安购物小票识别系统:1秒内精准识别,助力商场智能化升级!
  • 撕碎QT面具(7):container控件被spacer挤扁,无法进行控件添加的处理方案。
  • YOLOv12从入门到入土(含结构图)
  • Mysql测试连接失败
  • 【机器学习】K折交叉验证(K-Fold Cross-Validation)
  • Jenkins插件管理切换国内源地址
  • 基于STM32+ESP8266+手机 APP+阿里云的智能小车设计与实现(系统资料)
  • B树和B+树
  • 2013年下半年试题一:论软件架构建模技术与应用
  • 堆和栈的区别
  • 自制操作系统分享第四天
  • 数据库服务器是指什么?
  • 每日一题——编辑距离
  • 李家超:明日起香港特区护照持有人可免签入境阿联酋
  • 阿坝州委书记徐芝文已任四川省政府党组成员
  • 俄土外长通话讨论俄乌谈判问题
  • 湖北石首市委副书记、市长付勇接受审查调查
  • ​中国超大规模市场是信心所在——海南自贸港建设一线观察
  • 巴基斯坦全面恢复领空开放