Vue 3: Как вызвать функцию из другой функции в том же мутации.js в хранилище Vuex

В моем файлеmutations.js у меня есть одна функция, вызывающая другую функцию в том же файле. Вот мой пример кода:

export default {
  async addQuestionAnswer(state, payload) {
    alert(payload);
    this.updateSubjects(state);
    alert("This is never reached");
  },
  updateSubjects(state) {
    alert("This is never reached");
  },
}

Кто-нибудь знает, как вызвать функцию updateSubjects из функции addQuestionAnswer? Я проверил свой console.info и нашел эту ошибку:

Uncaught (in promise) TypeError: _this.updateSubjects is not a function

Это больше похоже на действие, IMO: vuex.vuejs.org/api/#actions Но, возможно, есть способ сослаться на родственную функцию, как вы хотите. Вы не можете ссылаться на него как есть?

kissu 25.11.2022 17:57

@kissu Мой код немного сложнее, но я сузил его до предупреждений, в которых говорится: «Это никогда не достигается». Я ломаю голову над тем, почему функция updateSubjects не вызывается...

maxloo 25.11.2022 18:00

@kissu Я также использовал предупреждения в своем коде, чтобы сузить возможности.

maxloo 25.11.2022 18:01

Тбх, alert довольно плохое решение для отладки в SPA. Лучше попробуйте обычный console.info.

kissu 25.11.2022 18:08

@kissu Я пробовал как удалить, так и добавить асинхронность к обеим функциям, но это тоже не сработало ...

maxloo 25.11.2022 18:08

Мутация синхронная, async точно не поможет.

kissu 25.11.2022 18:09

@kissu, я использую асинхронный режим, потому что моя функция извлекает данные с моего сервера Firebase. Я использовал console.info, спасибо, и в результате появилась эта ошибка: Uncaught (in promise) TypeError: _this.updateSubjects is not a function

maxloo 25.11.2022 18:11

Мутации синхронизируются, это обязательно. Если вы хотите что-то асинхронное, используйте действия. Кроме того, this, вероятно, не подходит, попробуйте без него. Наконец, если вы используете асинхронность, вы можете вернуться к actions и связать другие внутри без каких-либо проблем. Как и в моем первоначальном комментарии.

kissu 25.11.2022 18:14
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
8
236
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Спасибо @kissu, я нашел решение своей проблемы на основе ошибки console.info, которую я опубликовал с вашим предложением. Спасибо. Я добавил это в свой файл Mutations.js:

import store from '../store';

Затем я изменил это:

this.updateSubjects(state);

К этому:

store.commit("updateSubjects");

И это работает! :-)

хорошо, была ошибка из stackoverflow, когда я попытался пометить его как принятый: You can accept your own answer in 2 days

maxloo 25.11.2022 18:21

Это то, что я имел в виду под "когда вы можете".

kissu 25.11.2022 18:21

Другие вопросы по теме