Javascript Vuex突变不同步工作,但也不返回承诺

Javascript Vuex突变不同步工作,但也不返回承诺,javascript,vue.js,vuex,Javascript,Vue.js,Vuex,我的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();

我的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! {…}
我的控制台日志如下所示:

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! {…}
如果突变是同步的,它应该记录
当前第0节和
新状态之前
更新状态
,但它没有


它似乎没有返回承诺,因为当我执行
console.log(this.$store.commit('computeStatusData',status))它只记录
未定义的

改变状态的正确方法是在动作内部

一个有用的问题:

我尝试在vuex操作中使用相同的代码,据我所知,该操作打算从商店外调用,但我得到了相同的行为,它没有回答@Eduardo的问题。采取行动只是一种最佳做法。提交不可能不记录(例如,状态为非活动状态)。你们看到的是loadSections()结束后从另一个地方再次运行的变异?我会在变异代码的开头放一个日志来确定。