Задать вопрос
@RokeAlvo

Как использовать async/await в actions vuex?

Посмотрел, кучу ответов на этот вопрос, но почему то в итоге не работает:
в sore.js
actions: {
         async initialCityList({ commit }) {
            const siteContacts = await fetch('/api/contacts')
            commit('setSiteContacts', siteContacts)
        }
    },


в компоненте:
async created() {
    await this.$store.dispatch("initialCityList");
  },


если меняю на new Promise ..... все отлично.
  • Вопрос задан
  • 5728 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
@RokeAlvo Автор вопроса
в общем разобрался, если кому будет полезно:
await fetch() возвращает объект Response
соответственно требуется выполнить await response.json() или другие методы, в зависимости от типа получаемых данных. Обращаю внимание на await: response.json() возвращает Promise, соответственно нужен await
Итого:
actions: {
         async initialCityList({ commit }) {
            const siteContacts = await fetch('/api/contacts')
            commit('setSiteContacts',  await siteContacts.json())
        }
    },


При использовании Axios:
axios.get() возвращает объект, который содержит тело ответа в поле data, соответственно итоговый код:
actions: {
         async initialCityList({ commit }) {
            const siteContacts = await axios.get('/api/contacts')
            commit('setSiteContacts', siteContacts.data)
        }
    },
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@dmtrrr
Backend developer
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы