项目需要,要把部分数据写到缓存里,以便随时取用.但又要保证其时效性,要一定时间后再次进入获取最新数据,所以就参考资料,改了个给localstorage添加过期时间的方法.代码如下,为了方便,就不贴图片了.直接贴代码
export class myStorage{
//设置缓存
setItem(params:object){
let obj = {
key:'',
value:'',
expires:"",//过期时间;
startTime:new Date().getTime()//记录何时将值存入缓存,毫秒级
}
let options:any = {};
//将obj和传进来的params合并
Object.assign(options,obj,params);
if(options.expires){
//如果options.expires设置了的话
//以options.key为key,options为值放进去
localStorage.setItem(options.key,JSON.stringify(options));
}else{
//如果options.expires没有设置,就判断一下value的类型
let type = Object.prototype.toString.call(options.value);
//如果value是对象或者数组对象的类型,就先用JSON.stringify转一下,再存进去
if(type == '[object Object]'){
options.value = JSON.stringify(options.value);
}
if(type == '[object Array]'){
options.value = JSON.stringify(options.value);
}
localStorage.setItem(options.key,options.value);
}
}
//获取缓存
getItem(key:string){
let item:any = localStorage.getItem(key);
if(item){//判断缓存是否存在
//先将拿到的试着进行json转为对象的形式
try{
item = JSON.parse(item);
}catch(error){
//如果不行就不是json的字符串,就直接返回
item = item;
}
//如果有startTime的值,说明设置了失效时间
if(item.startTime){
let date = new Date().getTime();
//何时将值取出减去刚存入的时间,与item.expires比较,如果大于就是过期了,如果小于或等于就还没过期
if(date - item.startTime > item.expires){
//缓存过期,清除缓存,返回null
localStorage.removeItem(key);
return null;
}else{
//缓存未过期,返回值
return item.value;
}
}else{
//如果没有设置失效时间,直接返回值
return item;
}
}else{
return null;
}
}
//移出缓存
removeItem(key:string){
localStorage.removeItem(key);
}
//移出全部缓存
clear(){
localStorage.clear();
}
}
注:详见https://blog.csdn.net/zhaoxiang66/article/details/86703438
网友评论