Vue.js 创建的钩子不等待每个操作承诺之前解决
我有一个Vue.js 创建的钩子不等待每个操作承诺之前解决,vue.js,vuex,Vue.js,Vuex,我有一个beforeach路由守卫,它调用fetchworkspace操作。此操作执行对Axios的请求,其响应填充状态 但是,当从组件中的创建的钩子调用状态时,我刷新页面时,控制台中不会得到值,而是观察者 created() { console.log(this.workspace) # returns {__ob__: Observer} } 该操作正在返回一个承诺,但创建的钩子没有等待该承诺得到解决 这是路由器的挂钩: router.beforeEach((to, from, n
beforeach
路由守卫,它调用fetchworkspace
操作。此操作执行对Axios的请求,其响应填充状态
但是,当从组件中的创建的钩子调用状态时,我刷新页面时,控制台中不会得到值,而是观察者
created() {
console.log(this.workspace) # returns {__ob__: Observer}
}
该操作正在返回一个承诺,但创建的钩子没有等待该承诺得到解决
这是路由器的挂钩:
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)
})
}
}
创建的在每个之前的钩子之后调用。我不明白为什么会发生这种行为以及如何修复它
我希望从创建的中访问新状态数据的原因是调用其他操作,这些操作将基于此状态数据获取资源。请参阅和。我认为Vue是在路由器注册之前首先创建的。因此,在启动Vue实例之前,您应该在每次启动之前使用。我以前尝试过,但它不起作用。同样的结果。声明承诺应该是多余的,因为我在其他地方看到,Axios已经返回了一个承诺。这是否只有在刷新页面时才会发生?正常导航时工作正常?是的,正确。重新加载页面后,我可以在应用程序中来回浏览不同的页面,我看到它在控制台中正常显示状态。但这是有道理的,因为承诺已经异步解决,并且在我单击链接时可用。问题是为什么刷新页面时无法解决。我认为您链接的答案指的是另一个问题。我可以访问路由器中的状态。我在组件中没有访问权限的是来自路由的beforeach钩子中定义的承诺的结果。