node.js - MongoDB游标导致我的函数跳过步骤
问题描述
这是我的检查权限函数,它工作正常,但我无法返回结果,因为函数跳过了一步,首先返回“访问”变量,然后执行游标函数检查权限。我不知道我做错了什么。控制台日志批准:
控制台结果: 1 5 在这里返回 2 3 3 3 4
function permissionChecker(guildID, reqUserID, checkPexArray) {
console.log("1")
let access = false
let pexUserCheckCursor = db.db("MainDB").collection("Permissions").find({GuildID: guildID}).toArray(function (err, result) {
console.log("2")
let serverDB = result[0]
let serverPexGroups = serverDB.PexGroups
let serverPexGroupsNames = Object.keys(serverPexGroups)
//Object of user's pexes.
let serverPexUsers = serverDB.PexUsers
//Looking for at least one of required pexes.
for (let reqPex of checkPexArray) {
for (let pexName in serverPexUsers) {
console.log("3")
//If reqPex has in DB
if (reqPex == pexName) {
for (let userID of serverPexUsers[pexName]) {
//If req user has req pex.
if (userID == reqUserID) {
console.log("4")
access = true
return
} else {
access = false
return
}
}
}
}
}
})
console.log("5 return here")
}
解决方案
您的控制台输出是正确的,因为数据库读取是异步的。
考虑更改permissionChecker
为 anasync function
然后await
是 db 回调结果。或者将函数更改为在循环之后permissionChecker
返回 anew Promise
然后。resolve(access)
推荐阅读
- c# - 如何使用数据表更新部分数据库?
- python - Python Dash如何显示数据表中的所有行?
- c# - 如何使用图像背景将 StackLayout 填充到末尾并使用 xamarin 删除网格之间的间距
- c# - windows启动时程序启动时无法打开sqlite数据库文件
- computer-vision - YOLO v4 中的 bad.list 文件是什么
- ruby-on-rails - Rails form_with 在表单提交时混淆了第一个隐藏值,但在呈现 html 时没有
- node.js - 无效的 CSRF TOKEN 节点 js multer
- google-apps-script - 在第一个空行中插入数据
- flutter - Flutter Text 小部件中的字符串空格问题
- docker - 在 Docker 容器中使用 Windows 主机 GPU