微信小游戏开发:后端篇
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

如何清除本地缓存

wx.removeStorage这个接口是用于清除指定名称的数据缓存的。以下是清除游戏得分历史数据的代码:

另外有一个同步接口,对应的调用代码是这样的:

注意这两个接口的参数不一样,前者是一个对象,在对象中设置key,后者直接传递了一个key。

使用wx.removeStorageSync接口的代码虽然更简单,但因为调用是阻塞的,所以并不适合本地缓存的清除工作。大多数情况下我们需要将异步代码转化为同步代码,但有时候却要故意执行一段异步代码、完成一些异步工作,目的就是不阻塞主线程的执行。

如果想清除所有的本地数据,怎么办?这里有一个笨方法:先用wx.getStorageInfo接口获取本地数据的描述数据,然后用wx.removeStorage逐一清除,如代码清单1-8所示。

代码清单1-8 清除本地数据

上面的代码做了什么?

❑第12行通过回调参数对象res取得所有本地缓存数据的Key,keys是一个数组。

❑第13行通过for...of循环遍历数组keys。

❑第16行,由于属性名称与变量名称一致,因此都是key,这里进行了属性简写。

在clearLocalData(第9行)方法的实现中,没有使用同步接口,查询缓存消息与清除指定key的本地缓存用的都是异步接口。

看一下怎么调用这个方法:

直接调用就可以了,前面不需要加await。方法调用以后,第2行及后面的代码可以立即继续执行,主线程不会受到阻塞。

最后总结一下什么时候直接使用异步代码、什么时候使用“异步转同步”代码。

如果代码执行以后,不需要等待它的结果,换言之,下面的代码执行不依赖上面代码的执行结果,就适合直接使用异步代码;反之,则适合使用“异步转同步”代码,特别是在使用两层以上回调函数的场景中。