參考: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里面的回調函數