业务场景:
点击登录的时候获取token的问题,等登录后有了token之后在加载字典编码表(加载编码标表的时候需要有token)
拦截器的写法
main.js
点击登录按钮的方法
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这个我是这么写的
请问我这么写是否有问题要怎么改进?还有为什么调试的时候不管eae007是什么值都会进if那个判断但是条件是false也会进debugger。
是不是因为你的登录和你的加载字典编码表两个请求是同时执行的,可否用 async/await 等登录完成后再加载字典编码器。还有你请求的第一个接口时登录,拦截器里面的 token 就是 null 吧,只有你登录成功了接口才会返回 token , 你才会放到 sessionStorage 中去。