uniapp封装uni.request请求,实现重复接口请求中断上次请求(防抖)

1.对uni.request封装,在utils文件夹下创建request.js文件

@/utils/request.js:

javascript 复制代码
// @/utils/request.js文件

let BASE_URL = 'http://xxxxxx:8080/';


// QuestObj 存储请求对象,实现重复的请求中断上一次请求
const QuestObj = {};

const request = (options) => {
	const {
		url,
		method,
		data,
		header,
		questKey, // 重要!需要中断上次请求的接口传入唯一标识字符串,自己命名但不能重复,如'addUser'
	} = options
	return new Promise((resolve, reject) => {
		let questRes = uni.request({
			url: BASE_URL + url,
			method,
			data,
			header,
			dataType: 'String',
			success: res => {
                //这里可以对数据二次处理,如超过16位的整数经度丢失的问题
				resolve(JSON.parse(res.data));
			},
			fail: err => {
				reject(err)
			}
		})
		if (questKey) { // 重要!如果传入了唯一字符串就把请求对象存到QuestObj中方便调用
			QuestObj[questKey] = questRes;
		}
	})
}
export {
	BASE_URL,
	QuestObj, // 重要!导出请求对象
}
export default request

2.使用封装,在存放接口的文件夹中调用封装的请求

@request/user.js:

javascript 复制代码
// @request/user.js文件

import request from '@/utils/request' // 引入封装
import {
	QuestObj
} from '@/utils/request'



// 需要中断上次请求的接口传入questKey参数
export const addUser = (data, questKey) => {
	if (QuestObj && QuestObj[questKey]) QuestObj[questKey].abort(); // 重要!如果有上次请求就中断上次请求
	return request({
		url: 'user/addUser',
		method: 'post',
		data,
		questKey
	})
}

// 不需要中断的请求不传入questKey参数
export const getUser = (data) => {
	return request({
		url: 'user/getUser',
		method: 'post',
		data
	})
}

3.调用接口,可在任意页面调用以上请求

任意页面:

javascript 复制代码
// 任意页面

import {
	addUser,
    getUser,
} from '@/request/user.js'; //引入请求


// 按钮点击添加用户调用此函数,因可能多次点击,所以需要中断上次点击请求
const addUserFn = async () =>{
    let params = {
        name:'小明'
    }
    const result = await addUser(params,'addUser'); // 重要!传入唯一标识'addUser'
}


// 按钮点击查询,多次查询点击可能不需要中断上次点击请求
const addUserFn = async () =>{
    let params = {
        name:'小明'
    }
    const result = await getUser(params); //不用传唯一标识
}
相关推荐
烛衔溟15 分钟前
TypeScript 接口的基本使用 —— 定义对象形状
前端·javascript·typescript
铁皮饭盒1 小时前
成为AI全栈 - 第3课:路由 RESTful Elysia 状态码 设计规范
前端·后端·全栈
顾昂_1 小时前
Web 性能优化完全指南
前端·面试·性能优化
IT乐手1 小时前
Claude Code + Qwen 的配置方法
javascript·claude
前端程序媛-Tian2 小时前
前端 AI 提效实战:从 0 到 1 打造团队专属 AI 代码评审工具
前端·人工智能·ai
支付宝体验科技2 小时前
Ant Design Pro v6.0.0 发布
前端
T畅N2 小时前
审批流设计器(前端)
前端·elementui·vue·html·流程图·js
AlunYegeer2 小时前
JAVA,以后端的视角理解前端。在全栈的路上迈出第一步。
java·开发语言·前端
IT_陈寒3 小时前
Redis这个内存杀手,差点让我们运维半夜追杀我
前端·人工智能·后端
子兮曰3 小时前
DeepSeek TUI:原生 Rust 打造的终端 AI 编码 Agent
前端·javascript·后端