首页 > 解决方案 > NodeJS mysql承诺返回未定义

问题描述

我正在尝试为从 MySQL 表输出整数的不和谐机器人执行命令。

我尝试使用 async/await、promise 和回调来执行此操作,但结果总是相同的。在这里,我用承诺再次尝试它,因为过去它以某种方式起作用。现在不会了。

这是返回承诺的函数:

exports.checkAccess = (user) => {
    return new Promise((resolve,reject) => {
        sql.condb.query("SELECT `accessLevel` FROM `users` WHERE `DiscordID` = '" + user + "' LIMIT 1", function(err,rows){
            if(err) reject(err);
            else resolve(rows);
        })
    });
}

这是将结果分配给 accessLevel 变量的代码:

let accessLevel = -1;
cmds.checkAccess(message.author.id).then(rows=>{
        accessLevel = rows[0].accessLevel;
    }).catch((err)=>{
        console.log(err);
});

Catch 函数捕获显示“TypeError:无法读取未定义的属性 'accessLevel'”的错误。

标签: mysqlnode.jsasynchronouspromise

解决方案


您的查询似乎没有返回任何结果,而不是未定义的承诺。

我建议您将查询放入变量中并使用 console.log 来获取生成的查询,以便您可以检查最终查询。

let query = "SELECT `accessLevel` FROM `users` WHERE `DiscordID` = '" + user + "' LIMIT 1";
console.log(query);

尝试在您的 mysql 编辑器中选择标准输出查询。


推荐阅读