官方提供了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,
})