Return 显示未定义 javascript

Return showing undefined javascript

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

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 出错,因为它试图 return 一条空消息。这意味着我的功能 return 不正确。我看了一遍又一遍,它可能只是一个简单的修复,但我看不到它。

提前致谢

function checkPoints(user){ 没有 return 任何东西,即与 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);
});