Vue.js Vuex store.watch仅接受Vue路由器保护中的功能

Vue.js Vuex store.watch仅接受Vue路由器保护中的功能,vue.js,vuejs2,vue-component,vuex,vue-router,Vue.js,Vuejs2,Vue Component,Vuex,Vue Router,我正试图观察并等待,直到Vue路由器守卫从Vuex获得最终值,不管它抛出什么 [vuex]store.watch仅接受函数 代码如下: const isAdmin = _.get(store, 'getters.user/isAdmin', undefined) if (to.matched.some(record => record.meta.isAdmin)) { if (isAdmin === undefined) { const watcher = stor

我正试图观察并等待,直到Vue路由器守卫从Vuex获得最终值,不管它抛出什么 [vuex]store.watch仅接受函数

代码如下:

const isAdmin = _.get(store, 'getters.user/isAdmin', undefined)
  if (to.matched.some(record => record.meta.isAdmin)) {
    if (isAdmin === undefined) {
      const watcher = store.watch(isAdmin, isAdmin => {
        watcher() // stop watching
        if (!isAdmin) next({ path: '/not-available' })
      })
    } else if (serv.isAuth() && !isAdmin) {
      next({ path: '/not-available' })
    }
  }

有什么问题以及如何解决?

尽量不要等待Vuex-只需检查当前用户是否是管理员,然后继续。如果您需要在用户成为管理员后立即自动更改路由-您的观察者可能应该坐在路由器防护之外…@IVOGELOV在这种情况下,当您尝试刷新或直接键入URL时,它会重定向到“未找到”,因为当时它还没有包含值。这就是我使用watch的原因,但是如何修复上面隐藏错误的代码?一旦用户通过身份验证,刷新页面不应使其临时“未登录”,即使是在几毫秒内-他/她是否已登录。它稍后接收isAdmin getter not Auth,因为它是异步的。您谈论的是身份验证,其中令牌位于本地存储中,而角色通过Vuex通过API进行处理