用promis封装 wx.reques 失败后跳转登录页 登录页被加载多次?
发布于 3 年前 作者 slu 14119 次浏览 来自 问答

一个页面触发多个请求如果全部返回失败后 跳转登录页会被执行多次

登录页onload 有自动登录 由于登录页被多次加载 自动登录频繁触发 毫秒级请求

function request(url, method = "GET", data = {}, header = "application/x-www-form-urlencoded") {
    wx.showLoading({
        title: '努力加载中',
        mask: true
    })
    isShowLoading = true;
    //这里是判断不需要携带token
    if (urlList.indexOf(url) > -1) {
        header = {
            'Content-Type': header,
        }
    } else {
        header = {
            'Content-Type': header,
            'MINIAPP-TOKEN': wx.getStorageSync('token')
        }
        //console.log(wx.getStorageSync('token'))
    }
    return new Promise(function (resolve, reject) {
        wx.request({
            url: develop.BASE_URL + url,
            data: data,
            method: method,
            header: header,
            success: function (res) {
                if (res.statusCode == 200) {
                    if (res.data.result_code == 'due') {//token过期之后去首页自动登录
                        wx.clearStorage();
                        reject(res.data)
                        wx.reLaunch({
                            url: '/pages/login/login',
                        })
                    } else if (res.data.result_code == 'error') {//同时登录强制下线
                        wx.clearStorage();
                        reject(res.data)
                        wx.reLaunch({
                            url: '/pages/login/login?state=' + res.data.msg,
                        })

                    } else {
                        resolve(res.data);
                    }
                }

            },
            fail: function (err) {
                //服务器连接异常
                reject(err, "服务器连接异常,请检查网络再试")
            },
            complete: function (params) {
                if (isShowLoading) {
                    wx.hideLoading();
                    isShowLoading = false
                }
            }
        })
    })
}
2 回复

这个就是你代码的问题了

你的意思应该是,接口请求失败会执行跳转登录页,当多个请求异步发起,每个执行到错误后都会执行跳转登录页,这样就会多次跳转登录页,你登录页有逻辑,就会多次执行,有个思路较为简单些,就是定义一个全局变量,当有执行进入登录页则为true,等其他错误执行要跳转登录页时去校验这个变量 为true则阻断,如果从登录页退出 onUnload时再将这个变量置为false即可解决,看能否帮到你

回到顶部