收藏
回答

小程序已经获取了缓存,getStorageSync获取数据时怎么还会发起网络请求?

//设置缓存

getlistdata(){

    var that = this;

    wx.request({

      url: 'https://api-hmugo-web.itheima.net/api/public/v1/categories',

      success(res) {

        that.List = res.data.message[0].children[0].children

        that.setData({

          listdata: that.List

        })

        wx.setStorageSync("listdata", { data: that.List })

      }

//加载缓存

onLoad: function (options) {

    const Listdata = wx.getStorageSync("listdata");

    if (!Listdata){

      this.getlistdata();

    } else {

      this.setData({

        listdata: Listdata.data

      })

    }



两次编译都会发起请求,但是第二次的数据量比较少,刚学小程序,麻烦大神们指点指点

最后一次编辑于  2020-03-16
回答关注问题邀请回答
收藏

2 个回答

  • 风
    2020-03-16

    你的设置缓存是一个同步方法,接口请求是异步的,在你还没拿到数据时候,缓存已经设置了,此时为空,把缓存设置写在 success方法里面

    2020-03-16
    有用 1
    回复 3
    • 风
      2020-03-16
      success(res) {
              that.List = res.data.message[0].children[0].children
              wx.setStorageSync("listdata", { data: that.List })
              that.setData({
                listdata: that.List
              })
      2020-03-16
      回复
    • 风
      2020-03-16
      多了解一下  js 事件循环、队列
      2020-03-16
      回复
    • P.1in:
      P.1in:
      2020-03-16
      好的,谢谢你
      2020-03-16
      回复
  • 老张
    老张
    2020-03-16

    多好判断啊,注释掉storage操作再执行看结果呗。

    2020-03-16
    有用
    回复 2
    • P.1in:
      P.1in:
      2020-03-16
      只有一层判断,就是判断storage里是否存在Listdata,,存在就取storage,没有就执行方法,注释掉的话就就是每次都发请求,就是我发的第一张图那个
      2020-03-16
      回复
    • 老张
      老张
      2020-03-16回复P.1in:
      汗。那就写死呗,listdata==true,再Listdata==false。你得多不会调试啊。
      2020-03-16
      回复
登录 后发表内容
问题标签