【应用】promise登录
【让异步函数,同步执行】
this.$store
.dispatch("user/loginSuccess", response.data)
.then(() => {
sysUooApi.getUserMenu().then((menu) => {
});
})
.catch(() => {
this.getRandomCode();
this.loginBtnLoading = false;
this.$message.error("登录失败");
});
loginSuccess({ commit }, response) {
return new Promise((resolve, reject) => {
let jwtToken = response.access_token;
let jwtJson = decodeURIComponent(escape(window.atob(jwtToken.split('.')[1])));
let token =
response.token_type + " " + response.access_token;
let userInfo = JSON.parse(jwtJson);
commit("SET_TOKEN", token);
commit("SET_USER_INFO", userInfo);
setToken(token);
setUserInfo(JSON.stringify(userInfo));
resolve();
})
}
loginSuccess执行成功后(请求头,cookie等必要参数保存成功,再使用封装的ajax请求),因此在此之前的登录函数使用未封装的,请求头是手动加的。
使用promise让函数执行变成了顺序同步,dispatch返回的是一个promise,当这个对象所在脚本所有同步任务执行成功了,才会执行.then中的内容。
调用resolve或reject后,promise就结束了,后续操作放在.then中执行,then方法中第一个参数是resolve状态的回调函数,第二个是reject状态的回调函数(可选)