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

Vuejs2 Vue-仅在第一个操作完成后调用异步操作,vuejs2,vue-component,vue-router,vuex,Vuejs2,Vue Component,Vue Router,Vuex,我需要从我的组件内部调用两个操作,但是第二个操作应该在第一个操作100%完成它的工作后才开始 我试过了,但没用 mounted() { this.$store.dispatch('coinModule/loadApiCoins') .then(() => { this.$store.dispatch('coinModule/loadUserCoins') }) .catch(error => {

我需要从我的组件内部调用两个操作,但是第二个操作应该在第一个操作100%完成它的工作后才开始

我试过了,但没用

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) })
    }
这些应该是另一种方式。

当您分派一个操作时,默认情况下它没有
然后
回调。只有当操作返回
承诺时才会出现这种情况。您的
axios.get
调用应该返回一个
Promise
,但您的操作中没有返回它。您只需返回它,然后
然后
回调将在您的
挂载的
钩子中启动

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) })
},

你的代码看起来和我的一样。我如何用axios回报承诺?我想“.then()”是承诺…?我的错。我刚才看到你在任何事情之前加了“return”。就这样?我很困惑……对。假设您将
dispatch
调用的返回值存储在
mounted
hook-like
let promise=this.$store.dispatch('coinModule/loadApiCoins')
中。在代码中,
loadApiCoins
操作不会返回任何内容,因此
promise
将是
未定义的
promise。然后(()=>{})
将导致错误。这就是为什么
这个.store.dispatch('coinModule/loadApiCoins')。然后(()=>{})
将不起作用。分派调用的结果值为
未定义
。您需要从
Vue.axios
调用显式返回结果
Promise
。我仍然感到困惑。如果我尝试记录来自组件的响应,它仍然是未定义的,因此我想我不会真正返回它,但是代码现在可以按预期工作。。这个.store.dispatch('coins/loadApiCoins')。然后(response=>{console.log(response)})我不确定“记录来自组件的响应”是什么意思。如果您在
dispatch
方法中返回
axios
调用,则
console.log(this.$store.dispatch('coinModule/loadApiCoins'))
应在控制台中记录
Promise
对象。我想您可能正在使用
然后
回调来记录
调度
调用。由于
then
方法不返回任何内容,
console.log(this.$store.dispatch(“…”)。然后(()=>{}))
将在控制台中记录
未定义的
。这是意料之中的。