小程序本地缓存二次封装(过期,续期,获取全部)

代码实现

/*
  @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;
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容