vue.js - VUEX:无法获得最近的商店价值
问题描述
我正在同时使用 Vuex 和 Axios。在调度一个动作之后,我需要从响应中得到一条错误消息。我不明白为什么我只有在第二次通话后才能得到正确的回应。
在这里,我调度然后使用吸气剂。
this.$store.dispatch('registerUser', this.user);
this.errorMessage = this.getError;
console.log(this.errorMessage);
像这样在计算中调用 Getter
...mapGetters({getError:"getErrorMsg"}),
通过 Axios 调用 API 的操作
registerUser({commit}, user) {
const form = new URLSearchParams();
form.append('login', user.login);
form.append('password', user.password);
form.append('email', user.email);
form.append('firstName', user.firstName);
form.append('lastName', user.lastName);
form.append('roles', user.roles);
Axios.post(userUrl + '/create', form, config)
.then(
(response) => {
commit('setUser', response.data);
if (response.status === 206) {
commit('setErrorMessage', response.data);
}
},
(error) => {
commit('setErrorMessage', error.response.data);
});
}
那么,如何在拨打电话后得到正确的信息呢?
解决方案
您正在操作中执行 AJAX 请求registerUser
,因此它是异步操作。一旦请求得到响应,setErrorMessage
突变将在未来的某个时间执行,这发生在您访问this.getError
getter 之后。
在继续之前,您需要等待registerUser
完成以允许设置错误消息。
我会阅读异步 JavaScript 概念,如 Promises、async/await 等。
您可以通过进行以下更改来解决此问题。首先,您需要返回由返回的承诺Axios.post()
:
registerUser({commit}, user) {
// code omitted
return Axios.post(userUrl + '/create', form, config)
.then(...)
}
现在,当您发送操作时,您需要等待承诺解决:
this.$store.dispatch('registerUser', this.user)
.finally(() => {
this.errorMessage = this.getError;
console.log(this.errorMessage);
});
推荐阅读
- python - 奇怪的结果形式 stats.mannwhitneyu
- excel - Excel/VBA 是否优化冗余变量?
- react-native - 如何在 React Native 中自动链接依赖项的依赖项?
- c# - 无法将运算符“> =”应用于 X 类型的运算符和“浮点”
- javascript - A-Frame:我所有的孩子什么时候完全初始化?
- python - from torchvision import _C ImportError: DLL load failed: 找不到指定的模块
- php - ACF pro 中继器场随机行输出
- json - 使用 Jolt 变换的非嵌套数组
- shell - 用于循环 oneliner 的鱼壳
- c++ - cpp错误使用命名空间重复符号