确保获取到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之后要执行的函数 }); },
在下不才,有幸被看到,有哪里可以改进的,希望给点点意见