![微信小游戏开发:后端篇](https://wfqqreader-1252317822.image.myqcloud.com/cover/710/47133710/b_47133710.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
如何清除本地缓存
wx.removeStorage这个接口是用于清除指定名称的数据缓存的。以下是清除游戏得分历史数据的代码:
![](https://epubservercos.yuewen.com/BDE6C9/26480063801201206/epubprivate/OEBPS/Images/26_01.jpg?sign=1738935886-nEtcw37Vs1ybiDKLgDp4BH5voxQlmauI-0-e578c0131d0a8bb331dcd0179636a082)
另外有一个同步接口,对应的调用代码是这样的:
![](https://epubservercos.yuewen.com/BDE6C9/26480063801201206/epubprivate/OEBPS/Images/26_02.jpg?sign=1738935886-kdSVPtPysWwWEUwq3wnDWLQuvgx8USBD-0-240b14cca64d63fa4c416a2ee0c64ddf)
注意这两个接口的参数不一样,前者是一个对象,在对象中设置key,后者直接传递了一个key。
使用wx.removeStorageSync接口的代码虽然更简单,但因为调用是阻塞的,所以并不适合本地缓存的清除工作。大多数情况下我们需要将异步代码转化为同步代码,但有时候却要故意执行一段异步代码、完成一些异步工作,目的就是不阻塞主线程的执行。
如果想清除所有的本地数据,怎么办?这里有一个笨方法:先用wx.getStorageInfo接口获取本地数据的描述数据,然后用wx.removeStorage逐一清除,如代码清单1-8所示。
代码清单1-8 清除本地数据
![](https://epubservercos.yuewen.com/BDE6C9/26480063801201206/epubprivate/OEBPS/Images/26_03.jpg?sign=1738935886-9N452p3Z1emzDY6ZHWkKLmt5PjS45NQI-0-afe43f026002c7fd488697fe1b3c0069)
上面的代码做了什么?
❑第12行通过回调参数对象res取得所有本地缓存数据的Key,keys是一个数组。
❑第13行通过for...of循环遍历数组keys。
❑第16行,由于属性名称与变量名称一致,因此都是key,这里进行了属性简写。
在clearLocalData(第9行)方法的实现中,没有使用同步接口,查询缓存消息与清除指定key的本地缓存用的都是异步接口。
看一下怎么调用这个方法:
![](https://epubservercos.yuewen.com/BDE6C9/26480063801201206/epubprivate/OEBPS/Images/27_01.jpg?sign=1738935886-pLag88QoxXDb18HAf7rbF1yxWvd4keIv-0-74d2080d78f6cbbffb07b3826ed8890c)
直接调用就可以了,前面不需要加await。方法调用以后,第2行及后面的代码可以立即继续执行,主线程不会受到阻塞。
最后总结一下什么时候直接使用异步代码、什么时候使用“异步转同步”代码。
如果代码执行以后,不需要等待它的结果,换言之,下面的代码执行不依赖上面代码的执行结果,就适合直接使用异步代码;反之,则适合使用“异步转同步”代码,特别是在使用两层以上回调函数的场景中。