這是我的檢查權限的函式,它作業得很好,但我不能回傳結果,因為函式跳過了一個步驟,首先回傳 "access "變數,然后執行游標函式來檢查權限。我不知道我做錯了什么. 控制臺的日志顯示:
控制臺
控制臺結果:
1
5在這里回傳
2
3
3
3
4 uj5u.com熱心網友回復: 你的控制臺輸出是正確的,因為資料庫的讀取是異步的。
考慮將
標籤:function permissionChecker(guildID, reqUserID, checkPexArray) {
console.log("1"/span>)
let access = false.
let pexUserCheckCursor = db.db("MainDB") 。 collection("Permissions") 。 find({GuildID: guildID}) 。 toArray(function (err, result) {
console.log("2"/span>)
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"/span>)
//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"/span>)
access = true
回傳。
} else {
access = false
return ?
}
}
}
}
}
})
console.log("5 return here"/span>)
}
permissionChecker改為async函式,然后等待db的回呼結果。
或者改變permissionChecker函式以回傳一個新的Promise,然后在回圈之后resolve(access)。
