Vuejs2 Vue-仅在第一个操作完成后调用异步操作
我需要从我的组件内部调用两个操作,但是第二个操作应该在第一个操作100%完成它的工作后才开始 我试过了,但没用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 => {
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-likelet 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(“…”)。然后(()=>{}))
将在控制台中记录未定义的
。这是意料之中的。