import { EXPIRE } from '../config/app'; class Cache { constructor(handler) { this.cacheSetHandler = uni.setStorageSync; this.cacheGetHandler = uni.getStorageSync; this.cacheClearHandler = uni.removeStorageSync; this.cacheExpire = '_expire_2019_12_17_18_44'; } /** * 获取当前时间戳 */ time() { return Math.round(new Date() / 1000); } /** * 设置过期时间缓存 * @param {Object} key * @param {Object} expire */ setExpireCahe(key,expire) { expire = expire !== undefined ? expire : EXPIRE; if (expire) { this.cacheSetHandler(key + this.cacheExpire,this.time() + expire) } } /** * 缓存是否过期,过期自动删除 * @param {Object} key * @param {Object} $bool true = 删除,false = 不删除 */ getExpireCahe(key,$bool) { try{ let time = this.cacheGetHandler(key + this.cacheExpire); if (time) { let newTime = parseInt(time); if (time && time < this.time() && !Number.isNaN(newTime)) { if ($bool === undefined || $bool === true) { this.cacheClearHandler(key); this.cacheClearHandler(key + this.cacheExpire); } return false; } else return true; } else { return !!this.cacheGetHandler(key); } }catch(e){ return false; } } /** * 设置缓存 * @param {Object} key * @param {Object} data */ set(key,data,expire){ if(typeof data === 'object') data = JSON.stringify(data); try{ this.setExpireCahe(key,expire); return this.cacheSetHandler(key,data); }catch(e){ return false; } } /** * 检测缓存是否存在 * @param {Object} key */ has(key) { return this.getExpireCahe(key); } /** * 获取缓存 * @param {Object} key * @param {Object} $default * @param {Object} expire */ get(key,$default,expire){ try{ let isBe = this.getExpireCahe(key); let data = this.cacheGetHandler(key); if (data && isBe) { if (typeof $default === 'boolean') return JSON.parse(data); else return data; } else { if (typeof $default === 'function') { let value = $default(); this.set(key,value,expire); return value; } else { this.set(key,$default,expire); return $default; } } }catch(e){ return null; } } /** * 删除缓存 * @param {Object} key */ clear(key) { try{ let cahceValue = this.cacheGetHandler(key + this.cacheExpire); if(cahceValue) this.cacheClearHandler(key + this.cacheExpire); return this.cacheClearHandler(key); }catch(e){ return false; } } /** * 清除过期缓存 */ clearOverdue() { // let cacheList = uni.getStorageInfoSync(),that = this; // if (typeof cacheList.keys === 'object'){ // cacheList.keys.forEach(item=>{ // that.getExpireCahe(item); // }) // } } } export default new Cache;