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); //不用传唯一标识
}
相关推荐
接着奏乐接着舞。8 分钟前
部署BFF与前端的踩坑与经验记录
前端·node.js
小李子呢02117 小时前
前端八股CSS(2)---动画的实现方式
前端·javascript
GreenTea8 小时前
从 Claw-Code 看 AI 驱动的大型项目开发:2 人 + 10 个自治 Agent 如何产出 48K 行 Rust 代码
前端·人工智能·后端
渣渣xiong9 小时前
从零开始:前端转型AI agent直到就业第五天-第十一天
前端·人工智能
布局呆星9 小时前
Vue3 | 组件通信学习小结
前端·vue.js
C澒9 小时前
IntelliPro 企业级产研协作平台:前端智能生产模块设计与落地
前端·ai编程
OpenTiny社区11 小时前
重磅预告|OpenTiny 亮相 QCon 北京,共话生成式 UI 最新技术思考
前端·开源·ai编程
前端老实人灬11 小时前
web前端面试题
前端
Moment11 小时前
AI 全栈指南:NestJs 中的 Service Provider 和 Module
前端·后端·面试