官方提供了wx.setStorage 等接口给开发者缓存数据,但是对于使用Array()来缓存字典数据似乎存在bug?在设置后并不能成功。
-
并没有缓存成功
投机取巧:使用数组模拟字典的效果
解决方案如下
根据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,
-
})
-
},
缓存结果
|