您当前的位置: 首页 > 解决方案

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

  • 作者: admin
  • 发布于 2018-08-15 13:52:23
  • 来源:  
  • 栏目:解决方案

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

 

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

 
  1. var arr = Array()
  2. arr['key'] = 'value'
  3. wx.setStorage({
  4. key: 'test_key',
  5. data: arr
  6. })

控制台里是这样的!

06.jpg

并没有缓存成功 


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

解决方案如下

07.jpg

根据key取值 

08.jpg

根据key、data更新数组 


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

 
  1. read_record: {
  2. keys: Array(), // [小说id]
  3. datas: Array() // [章节id]
  4. }

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

 
  1. data: {
  2. read_record: {
  3. keys: Array(),
  4. datas: Array()
  5. }
  6. },
  7. // 初始化阅读记录
  8. initReadRecord: function() {
  9. let key = 'chapter_read_record'
  10. var data = wx.getStorageSync(key)
  11. if (data) {
  12. this.data.read_record = data
  13. }
  14. },
  15. // 获取阅读记录 根据小说的id获取上次阅读的章节的id
  16. getReadRecord: function(novel_id) {
  17. let keys = this.data.read_record.keys
  18. let datas = this.data.read_record.datas
  19. let idx = keys.indexOf(novel_id)
  20. return datas[idx]
  21. },
  22. // 保存阅读记录 根据小说id、章节id保存
  23. setReadRecord: function(novel_id, chapter_id) {
  24. let key = 'chapter_read_record'
  25.  
  26. let keys = this.data.read_record.keys
  27. let datas = this.data.read_record.datas
  28.  
  29. let idx = keys.indexOf(novel_id)
  30. // 如果没有找到索引,会返回-1
  31. if (idx == -1) {
  32. keys.push(novel_id)
  33. datas.push(chapter_id)
  34. } else {
  35. datas[idx] = chapter_id
  36. }
  37.  
  38. let that = this
  39. wx.setStorage({
  40. key: key,
  41. data: that.data.read_record,
  42. })
  43. },

缓存结果



温馨提示:这篇文章没有解决您的问题?欢迎添加微信:18948083295,有微信小程序专业人员,保证有问必答。转载本站文章请注明转自http://www.okeydown.com/(微信小程序网)。

  • 微信扫描二维码关注官方微信
  • ▲长按图片识别二维码
关注我们

微信小程序官方微信

栏目最新
栏目推荐
返回顶部