【发布时间】:2019-09-06 17:14:33
【问题描述】:
我正在尝试实现以下逻辑:调用登录,然后如果响应正常,则调用检索用户数据的方法。
登录操作
loginUser({commit,dispatch}, credentials) {
const form = new URLSearchParams();
form.append("login", credentials.login);
form.append("password", credentials.password);
const formConfig = {
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
};
return Axios.post(loginUrl, form, formConfig).then(
(response) => {
commit('setErrorMessage', '', {root: true});
commit('setAuthenticated', response.headers[authorization]);
dispatch('getUserByLoginAuth',credentials.login);
},
(error) => {
if (error.response.status===500){
commit('setErrorMessage', error.response.data.message, {root: true});
} else {
commit('setErrorMessage', error.response.data, {root: true});
}
});
},
从上面派发的第二个动作:
getUserByLoginAuth({commit, getters}, login) {
return getters.authenticatedAxios.get(userUrl + '/find', {
params: {
login: login
}
}).then(
(response) => {
commit('setErrorMessage', '', {root: true});
commit('setUser', response.data);
},
(error) => {
commit('setErrorMessage', error.response.data, {root: true});
});
},
仅从第二次调用此操作(据我了解,它与承诺有关)。
这是一个发送登录操作的组件代码
this.$store.dispatch('loginUser', this.credentials).then(() => {
this.errorMessage = this.getError;
if (this.errorMessage.length) {
this.errorOccurred = true;
}
this.$router.push({path: '/user/' + this.getId});
});
this.errorOccurred = false;
},
我也不确定我是否在正确的位置进行路由。据我了解,然后将使用 getUser 的承诺,因此登录时的 errorMessage 可能会丢失。我想阻止它并从第一次正确发送 getUser
【问题讨论】:
标签: javascript vue.js axios vuex