收藏
回答

当App.js获取openid缓存的时候,其他页面如何等待获取缓存后再加载?

App({

  onLaunch: function () {

    var openid=wx.getStorageSync('openid');

    if(openid){

      console.log('已经有openid的缓存了'+openid);

      return;

    }

    console.log('没有openid的缓存 连接服务器获取中~');

    wx.showLoading({

      title: '',

      mask:true

    })

    wx.login({

      success(res) {

        wx.request({

          url: 'https://wxxcx.fun/openid.php',

          data: {

            code:res.code

          },

          success(res) {

            wx.setStorageSync('openid',res.data);

            console.log('获取openid的缓存成功'+wx.getStorageSync('openid'));

            wx.hideLoading();

          },

          fail(res) {

            //console.log('获取失败', res)

          }

        })

      }

    });

  },

})

人为删除缓存后,第一次进页面就会报错,获取不到数据,需要刷新后才能正常。

因为其他会页面直接根据缓存中的openid加载数据内容,并不能等待app.js中的获得缓存的方法完成后再加载内容

回答关注问题邀请回答
收藏

3 个回答

  • 拾忆
    拾忆
    2022-12-05

    参考:

    app.js

    onLaunch:
    wx.login({
      success: async res => {
        // 请求接口返回的user在这里赋值给 this.globalData.user
        if (this.checkLoginReadyCallback) {
          this.checkLoginReadyCallback(res);
        }
      },
      fail: async res => {
        if (this.checkLoginReadyCallback) {
          this.checkLoginReadyCallback(res);
        }
      }
    })
    

    其它页面.js

    onLoad:
    const app = getApp()
    if (app.globalData.user) {
      // 请求其它接口else {
      app.checkLoginReadyCallback = res => {
        // 请求其它接口
      }
    }
    


    2022-12-05
    有用 1
    回复 4
    • Shawshank_King
      Shawshank_King
      2022-12-05
      还得是忆佬
      2022-12-05
      回复
    • 拾忆
      拾忆
      2022-12-05回复Shawshank_King
      原来是你
      2022-12-05
      回复
    • 随缘
      随缘
      2022-12-05回复拾忆
      app.checkLoginReadyCallback = res => {
          // 这里不执行
        }
      2022-12-05
      回复
    • 拾忆
      拾忆
      2022-12-05回复随缘
      自己在上面代码的注释地方增加打印,看看执行到哪个部分。
      2022-12-05
      回复
  • 跨商通
    跨商通
    2022-12-05

    JS异步,去了解一下。

    2022-12-05
    有用
    回复
  • Jianbo
    Jianbo
    2022-12-05

    在app.js里获取的openid可能滞后第一个加载的页面,因此在第一个加载的页面还需要判断是否有这个openid,如果没有还需要再请求服务器获得,然后再放缓存。

    2022-12-05
    有用
    回复
登录 后发表内容