在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
完成之前得到解决。
我应该如何应对这种情况?
答案 0 :(得分:2)
如果要避免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)
}