Javascript 在函数返回之前导出激发,如何修复此问题?
我有这个函数从api获取令牌,并检查我是否有管理员权限。问题是我的导出在检查功能之前触发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
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)页面以获得菜单,您可以显示如何导入此模块-您可能需要更改使用此模块的方式,因为它完全按照预期进行是的,我将添加问题