vue中axios取数据的问题

业务场景:
点击登录的时候获取token的问题,等登录后有了token之后在加载字典编码表(加载编码标表的时候需要有token)

拦截器的写法
main.js

clipboard.png

点击登录按钮的方法

    const params = Object.assign({}, this.login_form);
    if(params.username == null || params.username.trim() == ''){
      this.$message.error('用户名不能为空');
      return;
    }
    if(params.password == null || params.password.trim() == ''){
      this.$message.error('密码不能为空');
      return;
    }
    debugger
    login_axios(params).then((res) => {
      debugger;
      if(res.data.code == 1){
        this.$message.error(res.data.msg);
        return;
      }
      sessionStorage.setItem("loginUser", JSON.stringify(res.data));
      sessionStorage.setItem("token", res.data.token);
      console.log(sessionStorage.getItem("token"));
    debugger
      let eae007 = res.data.eae007;
      if(eae007 == "101"){
        debugger
        this.$router.push({path: '/blank',params:{}});
      }else if(eae007 == "102"){
        debugger
        this.$router.push({path: '/blank',params:{}});
      }else if(eae007 == "104" || eae007 == "109"){
        debugger
        this.$message({
          message: '恭喜你,登录成功',
          type: 'success',
          duration:1000
        });
        setTimeout(() => {
          this.$router.push({path: '/teacher',params:{}});
        },1500)
      }
    }).catch((err) => {
      this.$message.error('请求失败');
      console.log(err);
    });

    //加载字典编码表
    select_code_axios({}).then((res) => {
      console.log(res);
      var codeArray = res.data.resultMap.code;
      for(var i=0;i<codeArray.length;i++){
        var one = codeArray[i];
        one.value = one.epa902;
        one.label = one.epa903;
      }
      sessionStorage.setItem("selectCode", JSON.stringify(codeArray));
    }).catch((err) => {
      console.log(err);
    });
  }

这种写法我debugger的时候第一次的时候在拦截器那边取到的token的值是null,请问怎么解决。然后这个方法里面的if和else if中不管eae007是什么值都会走到debugger,用的谷歌浏览器调试~~

其中:login_axios和select_code_axios这个我是这么写的

clipboard.png
请问我这么写是否有问题要怎么改进?还有为什么调试的时候不管eae007是什么值都会进if那个判断但是条件是false也会进debugger。

阅读 2.5k
1 个回答

是不是因为你的登录和你的加载字典编码表两个请求是同时执行的,可否用 async/await 等登录完成后再加载字典编码器。还有你请求的第一个接口时登录,拦截器里面的 token 就是 null 吧,只有你登录成功了接口才会返回 token , 你才会放到 sessionStorage 中去。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题