Правильный подход для этого - использовать действия vuex. Характер действия должен быть асинхронным, поэтому, когда вы выполняете действие, вы можете установить ожидание его возникновения.
Как указано в документации
Действия похожи на мутации, различия в том, что:
- Вместо того, чтобы изменять состояние, действия совершают мутации.
- Действия могут содержать произвольные асинхронные операции.
Таким образом, вы можете дождаться выполнения этой операции, прежде чем переходить к следующей операции.
Например:
const store = new Vuex.Store({
state: {
token: null
},
mutations: {
SET_TOKEN (state, payload) {
state.token = payload
}
},
actions: {
SET_TOKEN ({ context }, token) {
context.commit('SET_TOKEN', token)
}
}
})
После этого в ваших методах / ловушках просто вызывается действие через диспетчеризацию method.
methods: {
async refreshStoreValue() {
await this.$store.dispatch('SET_TOKEN', token) //this will call an action declared in your store.
}
}
Вы можете использовать этот оператор внутри объявления метода asyn c или внутри хуков жизненного цикла (создан, смонтирован и т. д. c).