为了账号安全,请及时绑定邮箱和手机立即绑定

微信小程序 wx.setStorage 缓存字典策略

标签:
WebApp

官方提供了wx.setStorage 等接口给开发者缓存数据,但是对于使用Array()来缓存字典数据似乎存在bug?在设置后并不能成功。

    var arr = Array()
    arr['key'] = 'value'
    wx.setStorage({      key: 'test_key',      data: arr
    })

控制台里是这样的!

webp

并没有缓存成功


投机取巧:使用数组模拟字典的效果

解决方案如下


webp

根据key取值

webp

根据key、data更新数组


我的需求是缓存一个阅读记录的字典其数据格式如下

read_record: {      keys: Array(), // [小说id]
      datas: Array() // [章节id]
}

可以根据小说id去获取最近阅读的章节的id

  data: {    read_record: {      keys: Array(),      datas: Array()
    }
  },  // 初始化阅读记录 
  initReadRecord: function() { 
    let key = 'chapter_read_record'
    var data = wx.getStorageSync(key)    if (data) {      this.data.read_record = data
    } 
  },  // 获取阅读记录  根据小说的id获取上次阅读的章节的id
  getReadRecord: function(novel_id) {    let keys = this.data.read_record.keys    let datas = this.data.read_record.datas    let idx = keys.indexOf(novel_id)    return datas[idx]
  },  // 保存阅读记录  根据小说id、章节id保存
  setReadRecord: function(novel_id, chapter_id) {    let key = 'chapter_read_record'

    let keys = this.data.read_record.keys    let datas = this.data.read_record.datas    let idx = keys.indexOf(novel_id)    // 如果没有找到索引,会返回-1
    if (idx == -1) {
      keys.push(novel_id)
      datas.push(chapter_id) 
    } else {
      datas[idx] = chapter_id 
    } 

    let that = this
    wx.setStorage({      key: key,      data: that.data.read_record, 
    })
  },

webp

缓存结果



作者:一本大书
链接:https://www.jianshu.com/p/f002faef5fbc


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消