当前位置:   article > 正文

微信小程序同步/异步 setStorage/setStorageSync getStorage/getStorageSync

setstoragesync 和 getstoragesync 不一致

最近在写一个小程序的监控文件,遇到一个很常见的错,就是setStorage和getStorage是异步的问题

其中有两段代码是这样写的

  1. native.onLaunch = function (options) {
  2. console.log("hook onLaunch", options);
  3. onLaunch && onLaunch.apply(native, [options]);
  4. getUID(function (uid) {
  5. report("launch", options, uid, native.globalData.appid, native.globalData.mwbase || "https://v2m-test.mengxiaozhu.cn/ad-applet")
  6. }, 'launch')
  7. 复制代码
  1. native.onShow = function (options) {
  2. console.log("hook onShow", options);
  3. onShow && onShow.apply(native, [options]);
  4. getUID(function (uid) {
  5. report("show", options, uid, native.globalData.appid, native.globalData.mwbase || "https://v2m-test.mengxiaozhu.cn/ad-applet")
  6. }, 'show');
  7. }
  8. 复制代码

其实我的目的是这样的

  • onLaunch的时候,走一个接口,如果通过getStorage可以拿到缓存的话,就用这个缓存,拿不到的话就setStorage设置缓存
  • 按理说,我应该在onLaunch的时候setStorage,然后在onShow的时候拿到这个缓存并且用它,但是事实并不是这样的,我好像被骗了

结果是

  • 在onLaunch设置了缓存,没有问题,但是在某一步的时候应该是阻塞了,然后onLaunch还没有设置进缓存的时候,onShow就开始去缓存,导致拿不到,所以又在onShow的时候重新设置了缓存

我的解决方法

  • 用了setStorageSync,getStorageSync,但是我的同事说我是个傻叉,怪不得没有女朋友,哼

他的解决办法

  • setStorage没有改变,还是用
  1. const setUid = function(cb) {
  2. wx.setStorage({
  3. key: 'KeyMw',
  4. data: value,
  5. success: function(res) {
  6. cb(value)
  7. console.log('SuccessSet', res)
  8. },
  9. fail: function(err) {
  10. console.log('FailSet', err)
  11. }
  12. })
  13. }
  14. 复制代码
  • getStorage
  1. const stacks = [];
  2. const getUID = funcction(cb) {
  3. if(stacks.length >=0) {
  4. stacks.push(cb)
  5. }
  6. wx.getStorage({
  7. key: 'KeyMw',
  8. success: function(res) {
  9. if(res.data) {
  10. const _cb = stacks.pop();
  11. if(!_cb) {
  12. return
  13. }
  14. _cb(res.data)
  15. return
  16. }
  17. setUID(value => {
  18. const _cb = stacks.pop();
  19. if(!_cb) {
  20. return
  21. }
  22. _cb(value)
  23. })
  24. },
  25. fail: function() {
  26. setUID(value => {
  27. const _cb = stacks.pop();
  28. if(!_cb) {
  29. return
  30. }
  31. _cb(value)
  32. })
  33. }
  34. })
  35. }
  36. 复制代码
  • 当然,这是没有简化过得
  • 我也用了Promise,但是貌似没什么用

这是我第一次写文章,还是一个菜鸟,不喜勿喷,要是愿意指教还是很感激的,么么踹,笔芯

转载于:https://juejin.im/post/5b3b6cd2f265da0f9155e566

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/641688
推荐阅读
相关标签
  

闽ICP备14008679号