確保獲取到token值之后再執行請求,代碼的思路是,在app.js的封裝一個全局函數遞歸直到拿到了token值,拿到token值之后再去執行小程序要執行的第一個頁面的請求
- 目錄結構
- constant.js
- app.js
//app.js import CONSTANT from './utils/constant'; let baseURL = CONSTANT.API_URL; App({ onLaunch: function(options) { }, globalData: { userInfo: null, }, // 在等待拿到token值之后才執行success方法 verifyToken(success) { let token = wx.getStorageSync(CONSTANT.TOKEN); if (token) { let current = this; console.log("token存在. 進行校驗."); wx.request({ url: baseURL + "/api/user",//隨便一個小巧的接口 method: "GET", header: { "token": token, "version": CONSTANT.MINI_VERSION, }, success: function(res) { console.log("校驗結果:"); console.log(res.data); if (21020000 === res.data.status) { success && success(); // return; } else { token = null; wx.removeStorageSync(CONSTANT.TOKEN); setTimeout(() => { current.verifyToken(success); }, 300); } }, fail(err) { console.log("校驗失敗..."); console.log(err); token = null; wx.removeStorageSync(CONSTANT.TOKEN); setTimeout(() => { current.verifyToken(success); }, 300); } }); } else { console.log("token不存在,正在重新拿token.."); wx.login({ success: res => { console.log('code', res.code); wx.request({ url: baseURL + "/api/user/login", method: "GET", header: { "token": "", "version": CONSTANT.MINI_VERSION, }, data: { code: res.code, }, success: function(res) { console.log("登錄成功,結果:"); console.log(res.data); wx.removeStorageSync(CONSTANT.TOKEN); if (21020000 === res.data.status) { wx.setStorageSync(CONSTANT.TOKEN, res.data.data); console.log('res.data.data', res.data.data); token = res.data.data; success && success(); } } }); }, fail: function(err) { console.log("登錄失敗"); console.log(err); } }); } }, })
- 引用
在小程序的第一個執行的頁面中
const app = getApp();
onLoad: function(options) { let that = this; app.verifyToken(function() { //獲取token之后要執行的函數 }); },
在下不才,有幸被看到,有哪里可以改進的,希望給點點意見