创建的钩子不等待beforeEach操作承诺解决

时间:2019-06-18 00:50:29

标签: vue.js vuex

我有一个for loop路由守卫,它调用beforeEach动作。此操作执行对 Axios 的请求,其响应将填充状态。

但是,当从组件中的fetchWorkspaces钩子调用状态并刷新页面时,我没有在控制台中获得值,而是在观察者中。

created

该操作正在返回一个承诺,但是created() { console.log(this.workspace) # returns {__ob__: Observer} } 挂钩没有等待该承诺解决。

这是路由器的钩子:

created

这是动作及其突变:

router.beforeEach((to, from, next) => {
    store.dispatch('fetchWorkspaces').then(() => {
        next()
    })
}

export default { state: { workspaces: [] }, mutations: { SET_WORKSPACES(state, workspaces) { state.workspaces = workspaces.workspaces } }, actions: { fetchWorkspaces({ commit }) { return Vue.axios.get('/workspaces').then(response => { commit('SET_WORKSPACES', response.data) }) } } 钩子之后调用created。我不明白为什么会发生这种现象以及如何解决它。

我要从beforeEach访问新状态数据的原因是调用其他操作,这些操作将基于此状态数据获取资源。

1 个答案:

答案 0 :(得分:-1)

请参见thisthat。我认为Vue是在路由器注册beforeEach之前首先创建的。因此,在启动Vue实例之前,应该使用beforeEach