我正在创建一个应用程序,在某一点上我需要加载一些数据,但是对于用户来说,为了不看到损坏的数据,我要插入一个加载组件。
目前,我加载了一个setTimeout,但是在某个时候,API响应可能需要超过1秒。因此,我只想在所有调度完成后才更新加载状态。
MainComponent.vue
beforeCreate() {
this.$store.dispatch('responsibles/fetchData')
this.$store.dispatch('events/fetchData')
this.$store.dispatch('wallets/fetchData')
// Need to run this setTimeout after all the above dispatches become completed...
setTimeout(() => {
this.loading = false
}, 1000)
}store/modules/responsibles.js
const state = {
responsibles: []
}
const actions = {
fetchData({dispatch}) {
function getresponsibles() {
return http.get('responsibles')
}
axios.all([
getresponsibles()
]).then(axios.spread(function (responsibles) {
dispatch('setResponsibles', responsibles.data.data)
})).catch(error => console.error(error))
},
setResponsibles({commit}, responsibles) {
commit('SET_RESPONSIBLES', responsibles)
}
}
const mutations = {
SET_RESPONSIBLES(state, responsibles) {
state.responsibles = responsibles
}
}store/modules/events.js
const state = {
events: []
}
const actions = {
fetchData({dispatch}) {
function getEvents() {
return http.get('events')
}
axios.all([
getEvents()
]).then(axios.spread(function (events) {
dispatch('setEvents', events.data.data)
})).catch(error => console.error(error))
},
setEvents({commit}, events) {
commit('SET_EVENTS', events)
}
}
const mutations = {
SET_EVENTS(state, events) {
state.events = events
}
}store/modules/wallets.js
const state = {
wallets: []
}
const actions = {
fetchData({dispatch}) {
function getWallets() {
return http.get('wallets')
}
axios.all([
getWallets()
]).then(axios.spread(function (wallets) {
dispatch('setWallets', wallets.data.data)
})).catch(error => console.error(error))
},
setWallets({commit}, wallets) {
commit('SET_WALLETS', wallets)
}
}
const mutations = {
SET_WALLETS(state, wallets) {
state.wallets = wallets
}
}发布于 2019-02-19 05:22:30
return Promise由Axios创建,如
返回axios.all(……
请参阅https://vuex.vuejs.org/guide/actions.html#composing-actionsPromise.all中,等待它们全部完成
this.$store.dispatch('responsibles/fetchData'),(Promise.all this.$store.dispatch('events/fetchData'),this.$store.dispatch(‘wallet/fetchData’)).finally() => { //使用“最终”,因此即使有错误,也停止“加载”this.loading = false })https://stackoverflow.com/questions/54759153
复制相似问题