• 微信小程序--缓存,支持过期时间的二次开发封装


    简介

    微信小程序提供了缓存的api,包括同步和异步两种,具体api不多说明,可自行查看官方文档

    现在微信小程序缓存api存在一个问题就是没有设定过期时间,下面给大家介绍一下对小程序缓存的二次封装,使其支持设定过期时间

    实现方法

    先声明,这个并非原创方法,只是查找资料的时候看到的,觉得挺有用,就记录下来,也算转播给大家

    原作链接:https://gitee.com/JiangMu/wcache,侵删

    微信小程序缓存是永久性,实际开发中需要定制时效性缓存;因此做了二次开发

    设置缓存-----------put(k, v, t) k为key,v为具体内容(支持字符串、json、数组、boolean等等),t为可选参数表示有效时间(单位:秒)如存储k为123过期时间1秒,

    则调用put('k', '123', 1)方法;若永久存储调用put('k', '123') 永久保存json:put('k', {"a":"1"}),数组、boolean等同理。

    function put(k, v, t) {
      wx.setStorageSync(k, v)
      var seconds = parseInt(t);
      if (seconds > 0) {
        var timestamp = Date.parse(new Date());
        timestamp = timestamp / 1000 + seconds;
        wx.setStorageSync(k + dtime, timestamp + "")
      } else {
        wx.removeStorageSync(k + dtime)
      }
    }

    读取缓存-----get(k, def)-------def(自定义读取失败的默认值) k为key,def为可选参数,表示无缓存数据时返回值(支持字符串、json、数组、boolean等等)

    如读取k缓存,则调用get('k');若想要无缓存时,返回默认值则get('k','默认值'),支持各个数据类型。

    function get(k, def) {
      var deadtime = parseInt(wx.getStorageSync(k + dtime))
      if (deadtime) {
        if (parseInt(deadtime) < Date.parse(new Date()) / 1000) {
          if (def) { return def; } else { return; }
        }
      }
      var res = wx.getStorageSync(k);
      if (res) {
        return res;
      } else {
        return def;
      }
    }

    remove(k)移除某个key

    clear()清空所有key

    完整代码:

    var dtime = '_deadtime';
    function put(k, v, t) {
      wx.setStorageSync(k, v)
      var seconds = parseInt(t);
      if (seconds > 0) {
        var timestamp = Date.parse(new Date());
        timestamp = timestamp / 1000 + seconds;
        wx.setStorageSync(k + dtime, timestamp + "")
      } else {
        wx.removeStorageSync(k + dtime)
      }
    }
    
    function get(k, def) {
      var deadtime = parseInt(wx.getStorageSync(k + dtime))
      if (deadtime) {
        if (parseInt(deadtime) < Date.parse(new Date()) / 1000) {
          if (def) { return def; } else { return; }
        }
      }
      var res = wx.getStorageSync(k);
      if (res) {
        return res;
      } else {
        return def;
      }
    }
    
    function remove(k) {
      wx.removeStorageSync(k);
      wx.removeStorageSync(k + dtime);
    }
    
    function clear() {
      wx.clearStorageSync();
    }
    
    module.exports = {
      put: put,
      get: get,
      remove: remove,
      clear: clear,
    }

    小结

    本篇主要是引用原作者的东西,就当我是小小搬运工吧,毕竟现在找资料不太好找,就当做转播了!!!

  • 相关阅读:
    undefined symbol 问题解决记录
    2021年中国数字人民币发展研究报告
    如何画出优秀的架构图
    用SIKT模型,让用户画像效果倍增
    全面总结图表设计
    如何用一周了解一个行业
    未来社区解决方案
    增长4大阶段,实现营销倍增的核心法则
    裂变营销的3个层次,让你实现指数增长
    运营的3个层面,让你轻松获得忠实用户
  • 原文地址:https://www.cnblogs.com/till-the-end/p/8889162.html
Copyright © 2020-2023  润新知