收藏
回答

缓存取值求解

无缓存时 app.js异步缓存信息

    index.js onload是setData({data:wx.get同步缓存})

    有时拿不到缓存的数据因为还没缓存好 我加了一个判断 再setTimeout() 一段时间后重新setData()


有缓存时 正常


对于清除缓存 重新编译时 除了setTimeout()这个方法 有没有更好的解决方案

最后一次编辑于  2018-10-17  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏投诉关注问题回答

4 个回答

  • 卢霄霄
    卢霄霄
    2018-10-17

    这问题见过好多好多遍了。。

    app.js

    onLaunch:function(){

        wx.request({

            success: res=>{

                wx.setStorage({

                    key:'xxx',

                    value:res.xxxxx

                })

                typeof(this.callBack) && this.callBack(res.xxxxx)

            }

        })

    }


    page.js

    const app = getApp()

    onLoad: function(){

        wx.getStorage({

            key:'xxx',

            success: res=>{

                this.deal(res)

            },

            fail: ()=>{

                app.callBack = this.deal

            }

        })

    }

    2018-10-17
    赞同 2
    回复 29
    • 鸩
      2018-10-17

      就page.js get的时候用异步么

      2018-10-17
      回复
    • 鸩
      2018-10-17

      success: res=>{

                  this.deal(res)

              },

              fail: ()=>{

                  app.callBack = this.deal

              }

      没看懂

      2018-10-17
      回复
    • 卢霄霄
      卢霄霄
      2018-10-17回复

      取的到,就用。取不到,就传个回调给app.js

      2018-10-17
      回复
    • 卢霄霄
      卢霄霄
      2018-10-17回复

      用同步也一样

      onLoad: function(){

          let ret = wx.getStorageSync('xxx')

          if(ret){

              this.deal(res)

          } else {

              app.callBack = this.deal

          }

      }


      2018-10-17
      回复
    • 鸩
      2018-10-17回复卢霄霄

      我调用了app的一个函数 return undefined

      2018-10-17
      回复
    查看更多(24)
  • 鸩
    2018-10-17


    我感觉还是setTimeout 靠谱

    2018-10-17
    赞同
    回复 1
    • Wang
      Wang
      2018-10-17

      你这里setTimeout不稳定,我觉得主要是网络环境不同所需要的取数据的时间不同,那你就没法准确的拿到缓存里的数据。

      2018-10-17
      回复
  • Wang
    Wang
    2018-10-17

    如果app.js中数据还没有加载完成,那么这个页面急着用可以再调接口去取数据啊等待数据返回后再执行后面的操作。

    2018-10-17
    赞同
    回复
  • C.Q.Q
    C.Q.Q
    2018-10-19

    网络请求使用Promise进行封装,然后App上实现一个预取接口数据的存储Map,再加上一个事件通知方法,这样在Page上就能根据有无数据,与通知刷新方式进行接口数据的及时更新。


    可以看下这个:https://juejin.im/post/5bc70e275188255c5f541da1#heading-20

    2018-10-19
    赞同
    回复