代码实现
/*
@description: 本地缓存二次封装
@title: wxCache.js
@author: hhd
@Time: 2022-6-27 17:30
@last: 2022-6-30 10:00
@导入方式:
import wxCache from './common/wxCache.js' // 导入wxCache.js
App({
data:{},
wxCache: new wxCache(), // 全局导入
})
@使用方式:
app.wxCache.set('time','123', 1, true);
app.wxCache.get('time');
@局部引用:
import wxCache from '/common/wxCache.js'
wxCache.set('time','123', 1, true)
*/
// export default class WxCache { // undifend
var wxCache = {
/**
* 设置缓存数据
* @param {String} key 缓存字段名
* @param {*} value 缓存字段值
* @param {Number} expire 缓存过期时间 单位:秒
* @param {Boolean} isRenewal 是否开启持续使用中续期:默认开启
*/
set: function(key, value, expire, isRenewal=true) {
console.log(expire)
value = value ?? '';
if(!key) throw new Error("key cannot be empty")
let data;
if(expire) {
if(isNaN(expire) || expire < 1) throw new Error("Expire must be a number")
let expirefrom = parseInt(Number(expire) * 1000); // 秒转化毫秒
data = {
value: value, // 存储值
time: new Date().getTime(), // 存储时时间戳
expire: expirefrom, // 过期时间
isRenewal, // 是否开启续期功能
}
}else {
data = value;
}
wx.setStorageSync(key, JSON.stringify(data));
},
/**
* 获取缓存数据
* @param {String} key 缓存字段名
* @returns {String}
*/
get: function(key) {
if(!wx.getStorageSync(key)) return ""; // 判断key是否存在
const now = new Date().getTime(); // 获取当前时间
let storage;
try{
storage = JSON.parse(wx.getStorageSync(key)) // 获取缓存数据JSON
}catch{
storage = wx.getStorageSync(key) // 获取缓存数据非JSON
}
if(storage?.expire) {
if (parseInt(storage?.time + storage?.expire) >= now ) {
// 未过期期间被调用 则自动续期 进行保活
if(storage?.isRenewal) {
storage.time = now;
wx.setStorageSync(key, JSON.stringify(storage));
}
// 未过期获取
return storage?.value
}else {
// 已过期删除
this.remove(key);
return ""
}
}else {
// 没有设置时间处理返回
return storage
}
},
/**
* 获取全部storage
* @param {string} dataType 返回数据类型 object(默认), array
* @returns {object,array}
*/
getAll: function(dataType){
try {
const info = wx.getStorageInfoSync()
let allStorageArr = [];
let allStorageObj = {};
for(let item of info.keys){
allStorageArr.push({
key: item,
value: this.get(item)
})
allStorageObj[item] = this.get(item)
}
if(dataType === "array"){
return allStorageArr
}else{
return allStorageObj
}
} catch (err) {
console.log(err)
}
},
/**
* 移除缓存数据
* @param {String} key
*/
remove: function(key) {
wx.removeStorageSync(key);
},
/**
* 清空所有缓存数据
*/
clearAll: function() {
wx.clearStorageSync();
},
}
module.exports = wxCache;