【问题标题】:Return showing undefined javascript返回显示未定义的javascript
【发布时间】:2019-04-02 07:55:56
【问题描述】:

我正在编写一个不和谐的机器人来检查数据库中的点,然后返回它们。这是我目前的代码。

function userCheck(id, name) {
        date = new Date().toISOString().slice(0, 19).replace('T', ' ');
        con.query("SELECT id FROM users WHERE id = "+id, function (err, row) {
            if (!(row && row.length) ) {
                    con.query("INSERT INTO `users` (id,name,rank,points,signup) VALUES ('"+id+"', "+name+", '0', '0' , '"+date+"')"), function (err, result, fields){
                        if (err) throw err;
                    }
            }else{
                //fine
            }
    });
    }


    function checkPoints(user){
        id = user.id;
        name = con.escape(user.username);

        userCheck(id, name);
        console.log("SELECT points FROM users WHERE id = "+id);
        con.query("SELECT points FROM users WHERE id = "+id, function (err, result, fields){
            return result[0].points;
        });
    }

我调用这些函数的代码是这样的: return message.author.send(checkPoints(message.author));

这会导致 discordjs 错误,因为它试图返回空消息。这意味着我的函数没有正确返回。我一遍又一遍地查看它,它可能只是一个简单的修复,但我看不到它。

提前致谢

【问题讨论】:

  • 函数checkPoints没有return语句,因此返回undefined
  • 对 API 不熟悉,但我猜测 con.query 是一个异步函数,您在回调函数中返回。该函数在您的结果出现之前就结束了。您需要使用 promise 或 async/await。
  • 或者回调会做
  • @Bravo 它确实返回了吗?查询后。它还在查询之前检查用户是否在数据库中。
  • 不,它没有......返回在function (err, result, fields){函数中......返回不是从所有封闭函数返回

标签: javascript mysql node.js discord discord.js


【解决方案1】:

function checkPoints(user){ 不返回任何内容,即与 return undefined 相同

由于 con.query 是异步的 - 最简单的解决方法是使用回调,就像这样

function checkPoints(user, cb){
    id = user.id;
    name = con.escape(user.username);

    userCheck(id, name);
    console.log("SELECT points FROM users WHERE id = "+id);
    con.query("SELECT points FROM users WHERE id = "+id, function (err, result, fields){
        cb(result[0].points);
    });
}

checkPoints(message.author, function(result) {
    message.author.send(result);
});

或者,使用 Promise

function checkPoints(user){
    return new Promise(function(resolve, reject) {
        id = user.id;
        name = con.escape(user.username);

        userCheck(id, name);
        console.log("SELECT points FROM users WHERE id = "+id);
        con.query("SELECT points FROM users WHERE id = "+id, function (err, result, fields){
            if(err) return reject(err);
            resolve(result[0].points);
        });
    });
}

checkPoints(message.author)
.then(function(result) {
    message.author.send(result);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多