В моем файле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
@kissu Мой код немного сложнее, но я сузил его до предупреждений, в которых говорится: «Это никогда не достигается». Я ломаю голову над тем, почему функция updateSubjects не вызывается...
@kissu Я также использовал предупреждения в своем коде, чтобы сузить возможности.
Тбх, alert
довольно плохое решение для отладки в SPA. Лучше попробуйте обычный console.info
.
@kissu Я пробовал как удалить, так и добавить асинхронность к обеим функциям, но это тоже не сработало ...
Мутация синхронная, async
точно не поможет.
@kissu, я использую асинхронный режим, потому что моя функция извлекает данные с моего сервера Firebase. Я использовал console.info, спасибо, и в результате появилась эта ошибка: Uncaught (in promise) TypeError: _this.updateSubjects is not a function
Мутации синхронизируются, это обязательно. Если вы хотите что-то асинхронное, используйте действия. Кроме того, this
, вероятно, не подходит, попробуйте без него. Наконец, если вы используете асинхронность, вы можете вернуться к actions
и связать другие внутри без каких-либо проблем. Как и в моем первоначальном комментарии.
Спасибо @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
Это то, что я имел в виду под "когда вы можете".
Это больше похоже на действие, IMO: vuex.vuejs.org/api/#actions Но, возможно, есть способ сослаться на родственную функцию, как вы хотите. Вы не можете ссылаться на него как есть?