微信小程序缓存支持二次开发封装实现解析


Posted in Javascript onDecember 16, 2019

这篇文章主要介绍了微信小程序缓存支持二次开发封装实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

简介

微信小程序提供了缓存的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,
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
清除div下面的所有标签的方法
Feb 17 Javascript
使用AngularJS创建单页应用的编程指引
Jun 19 Javascript
javascript实现相同事件名称,不同命名空间的调用方法
Jun 26 Javascript
JS实现的文字与图片定时切换效果代码
Oct 06 Javascript
JavaScript trim 实现去除字符串首尾指定字符的简单方法
Dec 27 Javascript
jQuery实现的背景颜色渐变动画效果示例
Mar 24 jQuery
JavaScript通过filereader接口读取文件
May 10 Javascript
js实现放大镜特效
May 18 Javascript
Element Table的row-class-name无效与动态高亮显示选中行背景色
Nov 30 Javascript
详解一个基于react+webpack的多页面应用配置
Jan 21 Javascript
深入了解JavaScript代码覆盖
Jun 13 Javascript
vue+layui实现select动态加载后台数据的例子
Sep 20 Javascript
element-ui tooltip修改背景颜色和箭头颜色的实现
Dec 16 #Javascript
ant-design-vue 实现表格内部字段验证功能
Dec 16 #Javascript
js DOM的事件常见操作实例详解
Dec 16 #Javascript
js中script的上下放置区别,Dom的增删改创建操作实例分析
Dec 16 #Javascript
JavaScript 浏览器对象模型BOM原理与常见用法实例分析
Dec 16 #Javascript
javascript自定义右键菜单插件
Dec 16 #Javascript
js中的面向对象之对象常见创建方法详解
Dec 16 #Javascript
You might like
PHP读取文件内容后清空文件示例代码
2014/03/18 PHP
在Mac OS下搭建LNMP开发环境的步骤详解
2017/03/10 PHP
PHP registerXPathNamespace()函数讲解
2019/02/03 PHP
ThinkPHP框架整合微信支付之JSAPI模式图文详解
2019/04/09 PHP
利用javaScript实现点击输入框弹出窗体选择信息
2013/12/11 Javascript
jquery实现checkbox 全选/全不选的通用写法
2014/02/22 Javascript
AngularJS中的Directive实现延迟加载
2016/01/25 Javascript
谈谈JavaScript的New关键字
2016/08/26 Javascript
javascript动画之模拟拖拽效果篇
2016/09/26 Javascript
js仿小米官网图片轮播特效
2016/09/29 Javascript
详谈jQuery中的一些正则匹配表达式
2017/03/08 Javascript
Angular.JS中的指令引用template与指令当做属性详解
2017/03/30 Javascript
jQuery插件imgAreaSelect基础讲解
2017/05/26 jQuery
node 文件上传接口的转发的实现
2019/09/23 Javascript
Vue双向绑定实现原理与方法详解
2020/05/07 Javascript
详解JavaScript作用域、作用域链和闭包的用法
2020/09/03 Javascript
[02:03]DOTA2亚洲邀请赛 HGT战队出场宣传片
2015/02/07 DOTA
Python脚本实现DNSPod DNS动态解析域名
2015/02/14 Python
Java中重定向输出流实现用文件记录程序日志
2015/06/12 Python
Windows平台Python连接sqlite3数据库的方法分析
2017/07/12 Python
python输出100以内的质数与合数实例代码
2018/07/08 Python
python将控制台输出保存至文件的方法
2019/01/07 Python
Python实时监控网站浏览记录实现过程详解
2020/07/14 Python
Django model重写save方法及update踩坑详解
2020/07/27 Python
Pycharm github配置实现过程图解
2020/10/13 Python
Python Serial串口基本操作(收发数据)
2020/11/06 Python
python 发送邮件的四种方法汇总
2020/12/02 Python
工程总经理工作职责
2013/12/09 职场文书
安全口号大全
2014/06/21 职场文书
一份教室追逐打闹的检讨书
2014/09/27 职场文书
11.9消防日宣传标语
2014/10/08 职场文书
学生退学证明
2015/06/23 职场文书
JavaScript offset实现鼠标坐标获取和窗口内模块拖动
2021/05/30 Javascript
Redis中缓存穿透/击穿/雪崩问题和解决方法
2021/12/04 Redis
mysql 乱码 字符集latin1转UTF8
2022/04/19 MySQL
MySQL 计算连续登录天数
2022/05/11 MySQL