Как отправить другое действие из действия и отправить другое действие в Vuex - PullRequest
0 голосов
/ 13 марта 2019

В действии Vuex мы имеем следующую реализацию:

async actionA({ commit, dispatch }) {
  const data = this.$axios.$get(`/apiUrl`)
  await Promise.all([
    dispatch('actionB', { data: data }),
    dispatch('actionOthers'),
  ]).then(() => {
    commit('mutationA', data)
  })
}

async actionB({ commit, dispatch }, { data }) {
  await this.$axios.$get('/apiUrl', { params: data }).then(res => {
    if (res.length === 0) {
      dispatch('actionC', { data: data })
    }
    commit('mutationB', res)
  })
}

async actionC({ commit, dispatch }, { data }) {
  await this.$axios.$get('/anotherUrl', { params: data }).then(res => {
    commit('mutationC', res)
  })
}

Отправка actionB из actionA и отправка actionC из actionB в зависимости от результата actionB.
Однако actionA будет разрешено до завершения actionC.

Как мне справиться с такими случаями?

1 Ответ

2 голосов
/ 13 марта 2019

Если вы хотите, чтобы действие actionA не разрешалось до завершения действия actionC, вам нужно дождаться отправки действия actionC.

Вам нужно переписать действие actionB следующим образом:

async actionB({ commit, dispatch }, { data }) {
    const res = await this.$axios.$get('/apiUrl', { params: data })
    if (res.length === 0) {
        await dispatch('actionC', { data: data })
    }
    commit('mutationB', res)
}
...