时间: 2020-08-23|89次围观|0 条评论

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

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

控制台里是这样的!

微信小程序 wx.setStorage 缓存字典策略插图
并没有缓存成功

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

解决方案如下

微信小程序 wx.setStorage 缓存字典策略插图1
根据key取值
微信小程序 wx.setStorage 缓存字典策略插图2
根据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 缓存字典策略插图3
缓存结果

文章转载于:https://www.jianshu.com/p/f002faef5fbc

原著是一个有趣的人,若有侵权,请通知删除

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自起风了,原文地址《微信小程序 wx.setStorage 缓存字典策略
   

还没有人抢沙发呢~