Я вызываю функцию внутри директивы v-if, чтобы скрыть ссылки на боковой панели в соответствии с ролью пользователя.Поскольку пользователь извлекается из удаленной базы данных асинхронно, иногда случается, что иногда пользовательская информация внутри функции getUser () возвращает ноль, поэтому я подумал о том, чтобы установить тайм-аут в несколько секунд для ожидания доступа к пользовательской информации изатем снова запустите проверку прав доступа пользователя.
Функция входит в бесконечный цикл, когда я добавляю одну строку кода, подобную этой, ->
html
<SidebarNavTitle :key="item.key ? item.key : index" :name="item.name"
:classes="item.class" :wrapper="item.wrapper"
:ref="item.name"
v-show="checkUserRole(item.disableFor, item) === true" />
javascript
checkUserRole (disableFor, item) {
if (disableFor && disableFor.length > 0) {
// let roles = disableFor.slice(' ')
if (this.getUser()) {
if (disableFor.indexOf(this.getUser().role) != -1) {
// console.log('show false')
return false
} else {
// console.log('show true')
return true
}
} else {
console.error('Sidebarnav error. Not able to get loggedUser')
// when I just add this line of code, the checkUserRole function, keeps getting called in an infinite loop, and doesn´t enter the setTimeout
this.checkAgainElements.push([disableFor,item])
// debugger
if (this.checkAgain) {
this.checkAgain = false
// let _ = this
setTimeout( () => {
// _.checkAgainFunction()
}, 7000)
}
return false
}
}
return true
},
asyncComputed:{
asyncLoggedUser(){
console.log('inside async user getter store sidebarnav')
return this.$store.getters.user
}
},
},
data () {
return {
user: this.asyncLoggedUser,
checkAgainElements: [],
checkAgain: true,
doubleCheck:true,
}
},
getUser() {
if (!this.user) {
this.user = JSON.parse(sessionStorage.getItem('loggedUser'))
}
return this.user
},
Фактический результат
![infinite loop](https://i.stack.imgur.com/dONFN.png)
Я ожидаю, что функция будет перебирать все заголовки навигации и вводить settimeout Что яздесь может отсутствовать?