美文网首页微信小程序微信小程序开发微信小程序开发
微信小程序 wx.setStorage 缓存字典策略

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

作者: 一本大书 | 来源:发表于2018-08-14 12:40 被阅读16次

    官方提供了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 缓存字典策略

        本文链接:https://www.haomeiwen.com/subject/adgmbftx.html