问题概述
关于支付宝的缓存问题,官方文档虽然有所介绍,但有些由缓存引发的问题,官方文档没有给出明确的说明,在这里把我遇到的缓存相关问题以及解决办法分享给大家。
一 、如何获取当前页面设置的缓存?
看过支付宝小程序官方开发文档的朋友都知道,设置异步缓存用my.setStorage获取用my.getStorage,设置同步缓存用my.setStorageSync获取用my.getStorageSync。但是这种设置获取方式只适用于不同页面,然而开发过程中遇到在一个页面中设置缓存并且需要获取的情况怎么办呢?
在经过思考实践测试后发现,可以在当前页面同步设置缓存,然后异步获取缓存。
示例:
// 同步设置缓存
my.setStorageSync({key: "username",data: {UserName: '******'}});
// 异步获取缓存
var Username = my.getStorageSync({ key: 'username' }).data.UserName;
二、获取缓存后的判断引发的问题
在获取缓存时,需要用到缓存里的数据,那么这个时候就需要判断缓存数据是否为空,不为空的话再去使用缓存中的数据。就这个判空问题我发现了一个问题,这里举个例子来阐述一下:
设置缓存:my.setstorageSync({key:“a”,data:{A:"***"}}),然后跳转页面取缓存:var B = my.getStorageSync({ key: ‘a’ });
这个过程判断获取的缓存是否为空,就判断B.data或B.data.A 是否为空,然后不为空再走下面的流程或使用A,这是正确的流程。
但是做项目过程中,有时可能没有或者不需要设置缓存a,或设置缓存a但没有写A。再跳转到另个页面,这个页面获取缓存就只能判断B.data是否为null,而不能判断B.data.A是否为null,否则会报错。
当然也可能不判空,比如判断B.data.A是否为true,或者是否为具体的值也是同样的问题。
那么解决办法就是你在页面设置缓存a并写data中的A时在判断 B.data.A;或者页面没有必要设置(多个页面跳转的情况下)缓存a,的情况下,在跳转后的页面获取缓存时,只判断B.data。
示例:
// 页面A
my.setStorageSync({key: 'update',data:{ ICPupdate: true}}); //设置缓存
// 跳转页面
let icpup = my.getStorageSync({ key: 'update' }); //获取更新操作缓存
if( icpup.data.ICPupdate == true ){......}
总结
以上是我遇到的缓存引发的两个问题以及解决办法,主要要清楚同步异步的区别,和支付宝设置以及取缓存的格式和细节,遇到同样问题的小伙伴可以参考一下,有问题欢迎评论。