首页 > 解决方案 > 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")
}

标签: node.jsmongodb

解决方案


您的控制台输出是正确的,因为数据库读取是异步的。

考虑更改permissionChecker为 anasync function然后await是 db 回调结果。或者将函数更改为在循环之后permissionChecker返回 anew Promise然后。resolve(access)


推荐阅读