我在代码上下文中有一个存入缓存的步骤:
...
examInfo.signInfo = '123';//res.data.mcSign;//假设当前对象的signInfo属性值为123
console.log(examInfo);//输出{...signInfo:123}
wx.setStorageSync('mcLiftInfo', examInfo);//写入缓存mcLiftInfo对象
console.log(wx.getStorageSync('mcLiftInfo'));//能够正常获取缓存数据,{...signInfo:123}
但是在开发工具调试器上,storage中,发现当前缓存的字段mcLiftInfo中signInfo属性并没有更新赋值。然后在销毁页面的钩子函数中,获取缓存信息mcLiftInfo中同样没有signInfo属性——这就导致了后续流程出现问题
问:如何能够避免这种情况?让缓存在写入的时候能够实时更新,保证在获取缓存的时候,数据都是最新的?
补充截图:
(1)//前文代码片段在控制台的输出效果,会发现缓存的mcLiftInfo对象中signInfo是已经成功赋值了:
(2)//是控制台storage工具中的信息截图,mcLiftInfo中并没有signInfo属性:
目前已经排查到原因了,应该是缓存的mcLiftInfo对象在上下文中的某个地方闭包了——我在存入缓存的地方把key换成mcLiftInfoNew之后,在控制台发现缓存是更新了的也就是说mcLiftInfo这个key指向的缓存对象被某个地方给‘挟持’了,修改赋值受影响了。还得重新理一次上下文