【发布时间】:2019-09-03 09:41:09
【问题描述】:
我的 vuex 突变似乎无法同步工作。它看起来像这样:
mutations: {
computeStatusData(state, status) {
if (status.active !== true) { return }
const started = new Date(status.startedAt);
started.setHours(0, 0, 0, 0);
const today = new Date();
status.currentDay = Math.floor((today.getTime() - started.getTime()) / (1000 * 60 * 60 * 24));
status.currentWeek = Math.floor(status.currentDay / 7);
if (!status.programm.sections) { console.log('No Sections'); return; }
for (let i = 0; i < status.programm.sections.length; i++) {
if (status.currentWeek <= status.programm.sections[i].to) {
status.currentSection = i;
console.log('Current Section', status.currentSection)
break;
}
}
console.log('new status!', status)
},
在我的组件的一个方法中,我这样称呼它:
async loadSections() {
await somethingElse();
if (this.status && this.programm.sections) {
console.log('Recomputing Status')
this.status.progamm = this.programm;
this.$store.commit('computeStatusData', status);
console.log('updated Status', this.status)
}
this.$nextTick(() => { this.$forceUpdate(); })
},
我的控制台日志如下所示:
Recomputing Status
updated Status {…}
Current Section 0
new status! {…}
如果突变是同步的,它应该在updated Status 之前记录Current Section 0 和new Status!,但它没有。
它似乎没有返回 Promise,因为当我执行 console.log(this.$store.commit('computeStatusData', status)); 时,它只会记录 undefined。
【问题讨论】:
-
提交是不是可能没有记录(例如状态不活跃)。你看到的是 loadSections() 结束后另一个地方的另一次突变?为了确定,我会在突变代码的开头放一个日志。
标签: javascript vue.js vuex