继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

慕标5832272
关注TA
已关注
手记 1254
粉丝 232
获赞 1002

官方提供了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


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP