項目需要,要把部分數據寫到緩存里,以便隨時取用.但又要保證其時效性,要一定時間后再次進入獲取最新數據,所以就參考資料,改了個給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