常用接口避免频繁请求

背景

在项目开发过程中我们难免会遇到一些通用的接口,需要在多个页面调用,拿去结果。比如我们常用的字典接口,后端通过字典配置一些数据,通常这些字典数据是不常更改的。我们通过字典接口传递不同的参数过去,获取到接口,但是往往我们会在多个页面需要获取到某一个字典的数据,这时候如果每次需要获取到字典数据的时候就重新发一个请求,会导致我们发一些无意义的请求。此时我们会有什么优化想法呢?

优化方案

解决这个问题,我们首先会想到把请求的字典数据缓存下来,然后等需要的时候再从缓存里面取出来就行了。用localstrage或者vuex都可以。
我们考虑到获取数据的时候写法更简便一些,那我们请求接口的位置就需要使用Promise的写法

getCode(data).then(res => {
	this.XXX = res.XXX;
	});

代码

util.js
// 因为传参设定为数组格式,有可能存在里面部分缓存过了,部分没有缓存过的数据,需要先把缓存过的数据摘出来
function getCode(data){
	return new Promise((resolve, reject) => {
		let newCodes = [];
		// 判断是数组里面是否存在
		for (let item of data) {
			if (!store.getters.dictList[item] || !store.getters.dictList[item].length) {
				newCodes.push(item);
			}
		}
		if (newCodes.length) {
			getDictList(newCodes)
				.then(async res => {
					if (res.code == 200) {
						newCodes.forEach(dict => {
							store.commit('setDict', {
								key: dict,
								value: res.result[dict] || []
							});
						});
						resolve(store.getters.dictList);
					}
				})
				.catch(error => {
					reject(error);
				});
		} else {
			resolve(store.getters.dictList);
		}
	});
}

store

state:{
	dictList: {} //字典表
}
mutations:{
// 设置字典表
setDict: (state, dict) => {
	Vue.set(state.dictList, dict.key, dict.value);
		// state.dictList[dict.key] = dict.value;
	}
}

页面中使用

let data = ['XXX', 'XX', 'X'];
getCode(data).then(res => {
			this.XXX= res.XXX;
			this.XX= res.XX;
			this.X= res.X;
		});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值