微信小程序确保获取到token值之后再执行请求

确保获取到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之后要执行的函数
        });

    },

在下不才,有幸被看到,有哪里可以改进的,希望给点点意见

 

  

 

posted @ 2020-03-29 15:06  mei1234!  阅读(7772)  评论(4编辑  收藏  举报