收藏
回答

用promis封装 wx.reques 失败后跳转登录页 登录页被加载多次?

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

登录页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 个回答

  • 咖啡有点甜
    咖啡有点甜
    2023-06-02

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

    2023-06-02
    有用
    回复 1
    • 贾ͯ公ͯ子ͯ
      贾ͯ公ͯ子ͯ
      2023-06-02
      谢谢。我想问我可以把这个标志改为false的时机可以放在resolve 这层判断里嘛
      2023-06-02
      回复
  • 那一抹笑😃 穿透阳光
    那一抹笑😃 穿透阳光
    2023-06-02

    这个就是你代码的问题了

    2023-06-02
    有用
    回复
登录 后发表内容