• 微信小程序确保获取到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之后要执行的函数
            });
    
        },

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

      

  • 相关阅读:
    javascript 字符串截取
    HTML5 转
    Javascript try catch finally
    C#之json字符串转xml字符串
    AspNetCore Json序列化设置
    类加载(对象创建)顺序
    线性表,线性表和链表的区别
    Implement int sqrt(int x).
    Add Binary
    Roman to Integer(将罗马数字转成整数)
  • 原文地址:https://www.cnblogs.com/mei1234/p/12592378.html
Copyright © 2020-2023  润新知