Vue - 仅在第一个完成后调用异步操作

时间:2017-10-18 23:22:55

标签: vuejs2 vue-component vue-router vuex

我需要从我的组件中调用2个动作,但第二个应该只在第一个完成它的工作后才开始。

我正在尝试这个,但它不起作用

mounted() {
    this.$store.dispatch('coinModule/loadApiCoins')
        .then(() => {
            this.$store.dispatch('coinModule/loadUserCoins')
        })
        .catch(error => {
            console.log(error)
        });
},

这两个动作是

    loadApiCoins({ commit, dispatch, rootGetters }) {
        Vue.axios({
                method: 'get',
                url: 'https://api.coinmarketcap.com/v1/ticker/',
                transformRequest: [(data, headers) => {
                    delete headers.common.Authorization
                    return data
                }]
            })
            .then(response => { commit('SET_API_COINS', response.data) })
            .catch(error => { console.log(error) })
    },

    loadUserCoins({ commit, dispatch, rootGetters }) {
        Vue.axios.get('http://127.0.0.1:8000/api/coins/')
            .then(response => {
                commit('SET_USER_COINS', response.data)
                commit('SET_USER_PORTFOLIO_OVERVIEW')
            })
            .catch(error => { console.log(error) })
    }

这些应该是另一种方式。 Screen of my network tab

1 个答案:

答案 0 :(得分:2)

当您发送操作时,默认情况下它没有then回调。只有在操作返回Promise时才会出现这种情况。您的axios.get来电应该返回Promise,但您不会在行动中退回。您应该简单地返回它,然后then回调将在您的mounted挂钩中触发。

loadApiCoins({ commit, dispatch, rootGetters }) {
  return Vue.axios({
    method: 'get',
    url: 'https://api.coinmarketcap.com/v1/ticker/',
    transformRequest: [(data, headers) => {
      delete headers.common.Authorization
      return data
    }]
  })
  .then(response => { commit('SET_API_COINS', response.data) })
  .catch(error => { console.log(error) })
},