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

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

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

控制台里是这样的!

并没有缓存成功

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

解决方案如下


根据key取值
根据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, 
    })
  },
缓存结果

你可能感兴趣的:(微信小程序 wx.setStorage 缓存字典策略)