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
Javascript 在函数返回之前导出激发,如何修复此问题?_Javascript_Vue.js_Asynchronous - Fatal编程技术网

Javascript 在函数返回之前导出激发,如何修复此问题?

Javascript 在函数返回之前导出激发,如何修复此问题?,javascript,vue.js,asynchronous,Javascript,Vue.js,Asynchronous,我有这个函数从api获取令牌,并检查我是否有管理员权限。问题是我的导出在检查功能之前触发 const async = [ { path: '*', redirect: '/404', hidden: true } ] var hasAdmin = getAdmin() if (hasAdmin === undefined || hasAdmin === null) { var token = null var url

我有这个函数从api获取令牌,并检查我是否有管理员权限。问题是我的导出在检查功能之前触发

const async = [
  { path: '*', redirect: '/404', hidden: true }
]
     
    var hasAdmin = getAdmin()
        if (hasAdmin === undefined || hasAdmin === null) {
          var token = null
          var url = null
          var uri = window.location.href.split('?')
          if (uri.length === 2) {
            var vars = uri[1].split('&')
            var getVars = {}
            var tmp = ''
            vars.forEach(function(v) {
              tmp = v.split('=')
              if (tmp.length === 2) {
                getVars[tmp[0]] = tmp[1]
              }
              token = getVars.AUTH_ID
              url = getVars.DOMAIN
            })
            getUserAdmin(url, token)
              .then(response => {
                var hasAdmin = response.result
                if (hasAdmin === true) {
                console.log('hasAdmin: ' + hasAdmin)
                  async.push(adminRouter)
                }
              })
              .catch(error => {
                console.log(error)
              })
          }
        } else if (hasAdmin === true) {
          async.push(adminRouter)
        }
    
    export const asyncRoutes = async
    console.log('hasAdmin2: ' + hasAdmin)
以下是Im如何使用常量异步路由:

import { asyncRoutes, constantRoutes } from '@/router'

/**
 * Use meta.role to determine if the current user has permission
 * @param roles
 * @param route
 */
function hasPermission(roles, route) {
  if (route.meta && route.meta.roles) {
    return roles.some(role => route.meta.roles.includes(role))
  } else {
    return true
  }
}

/**
 * Filter asynchronous routing tables by recursion
 * @param routes asyncRoutes
 * @param roles
 */
export function filterAsyncRoutes(routes, roles) {
  const res = []

  routes.forEach(route => {
    const tmp = { ...route }
    if (hasPermission(roles, tmp)) {
      if (tmp.children) {
        tmp.children = filterAsyncRoutes(tmp.children, roles)
      }
      res.push(tmp)
    }
  })

  return res
}

const state = {
  routes: [],
  addRoutes: []
}

const mutations = {
  SET_ROUTES: (state, routes) => {
    state.addRoutes = routes
    state.routes = constantRoutes.concat(routes)
  }
}
const actions = {
  generateRoutes({ commit }, roles) {
    return new Promise(resolve => {
      let accessedRoutes
      if (roles.includes('admin')) {
        accessedRoutes = asyncRoutes || []
      } else {
        accessedRoutes = filterAsyncRoutes(asyncRoutes, roles)
      }
      commit('SET_ROUTES', accessedRoutes)
      resolve(accessedRoutes)
    })
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}
我总是需要重新加载(f5)在第一次访问页面获得菜单管理

等待承诺不起作用,因为反出口应始终处于顶部。你知道我该怎么解决这个问题吗

obs:注意力在变量hasAdmin中


由于
getUserAdmin
是异步的-当然是中的console.logs。然后将在代码末尾的console.log之后出现-这就是异步工作的方式我对代码和图像进行了一些更改。我认为现在更容易理解菜单管理员从来没有在第一次访问。我需要重新加载(f5)页面以获得菜单,您可以显示如何导入此模块-您可能需要更改使用此模块的方式,因为它完全按照预期进行是的,我将添加问题