微信小程序的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里面的回調函數

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM