微信小程序的onload页面加载先于onLaunch 加载,导致登录获取数据有问题

参考:https://blog.csdn.net/txqd1989/article/details/79096415

本文采用第二种方法,使用异步Promise来解决页面加载完成后却拿不到storage中的内容,页面加载在登录前

本文讲的是登录获取不到数据的问题及登录步骤

1.在app.js创建方法

  getLogin() {
    // 查看是否有登录isLogin字段
    const isLogin = wx.getStorageSync('isLogin')
      
    
    // 如果本地没有存储,表示没有登录,没有登录就要请求,否则不请求
    if(!isLogin ) {
      // 登录
      return new Promise(function (resolve, reject) {
        wx.login({
          success: res => {
            console.log(res.code, '返回')
            uriFun.loginFun(res,resolve) // 这个是我封装的登录
            // 发送 res.code 到后台换取 openId, sessionKey, unionId
          }
        })
      })
    } else {
     return new Promise(function (resolve, reject) {
      resolve()
      })
    }
  },

我封装的登录

 // 登录
  function loginFun(res,resovle) {
   

    request.getData("user/loginByCode?code=" + res.code, 
        backres => {
          console.log(backres, '获取到了吗')
          if(backres.status == "success") {

            wx.setStorage({
              key: 'loginToken',
              data: backres.data.token
            });
            wx.setStorage({
              data: backres.data,
              key: 'userinfo',
            });
            wx.setStorage({
              data: 'true',
              key: 'isLogin',
            })
            resovle() // 这里调用,表示登陆成功后再执行回调内容,即首页index。js中的函数
          }
        },
        fail => {
          console.log(fail, '失败了吗')
        }
      )
  
  
  }

2.将以上登录的方法在onLaunch中调用

 onLaunch() {
    this.getLogin()
  },

3.在首页的index.js中

  onLoad() {

   var that = this
    getApp().getLogin().then(()=>{ // 意思是先登录后再加载,即onLaunch 先于onload加载
      getAddress.getAddress(that);
    })
  },

说明:第3步中的then里面的回调函数是Promise中 的resolve,

resolve() 表示调用then里面的回调函数