Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vue.js 创建的钩子不等待每个操作承诺之前解决_Vue.js_Vuex - Fatal编程技术网

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钩子中定义的承诺的结果。