【应用】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状态的回调函数(可选)

原文地址:https://www.cnblogs.com/xixicf/p/14172015.html