zoukankan      html  css  js  c++  java
  • 微信小程序的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里面的回调函数
  • 相关阅读:
    新内容记录:
    一个用于提取简体中文字符串中省,市和区并能够进行映射,检验和简单绘图的python模块
    django后台获取相同name名的数据
    python 使用qqwry.dat获取ip物理地址:速度快
    laydate设置起始时间,laydate设置开始时间和结束时间
    评论抓取:Python爬取微信在APPStore上的评论内容及星级
    H5上传压缩图片
    Django自带的加密算法及加密模块
    git入门
    WPF
  • 原文地址:https://www.cnblogs.com/lude1994/p/14877928.html
Copyright © 2011-2022 走看看