Мутация Vuex не работает синхронно, но и не возвращает обещание - PullRequest
0 голосов
/ 12 апреля 2019

Моя мутация 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! {…}

Если мутация была синхронной, она должна регистрировать Current Section 0 и new Status! до updated Status, но это не так.

Кажется, он не возвращает Обещание, потому что, когда я делаю console.log(this.$store.commit('computeStatusData', status));, он просто записывает undefined.

1 Ответ

0 голосов
/ 12 апреля 2019

Правильный способ изменить статус - внутри действия.

https://vuex.vuejs.org/guide/actions.html

Полезный вопрос: Vuex Action против мутаций

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...