从函数中获取值

Getting value from a function

我的代码可以工作,但不是我想要的那样。 不和谐的输出是 Your name is undefined。 我希望它是 Your name is Boanak。我需要它是它从 table 获得的值。

我正在 discord 上的一个机器人上工作,用户必须注册才能使用其中的一些命令。提前致谢!

getPlayerid = function(client, message, callback){
var member = message.member.user;
var db = new sqlite3.Database('Matches');
db.serialize(function() {
    db.all(`SELECT Name FROM Users WHERE Nameid =`+member.id, function(err, allRows){
        if(err != null){
            //console.log(err);
            callback(0);
        }
        callback(allRows);
        db.close();
    });
});
}


z = getPlayerid(client, message, function(data){
})
message.channel.send(`Your Name is ${z}`);

您的代码 ID 中的问题 message.channel.send(您的名字是 ${z}); 在查询 returns 结果之前执行,因此输出 undefined.

getPlayerid = function(client, message, callback){
    var member = message.member.user;
    var db = new sqlite3.Database('Matches');
    db.serialize(function() {
        db.all(`SELECT Name FROM Users WHERE Nameid =`+member.id, 
            function(err, allRows){
               if(err != null){
                 //console.log(err);
                 callback(0);
               }
               callback(allRows);
               db.close();
       });
    });
}


/* moved the statement in the callback function */

z = getPlayerid(client, message, function(data){
    message.channel.send(`Your Name is ${data}`);
});

你的函数是异步的,所以你的变量不能在你的函数外使用。

我认为你必须这样做:

var getPlayerid = function(client, message, callback) {
    var member = message.member.user;
    var db = new sqlite3.Database('Matches');
    db.serialize(function() {
        db.all(`SELECT Name FROM Users WHERE Nameid =`+member.id, function(err, allRows){
            if(err) {
                //console.log(err);
                callback(err, null);
            }
            else {
                callback(null, allRows);
            }
            db.close();
        });
    });
};


getPlayerid(client, message, function(err, data){
    if (err) {
        console.log(err);
    }
    else if (data && data.length) {
        message.channel.send(`Your Name is ${data[0].Name}`);
    }
    else {
        message.channel.send("Your ID can't be found");
    }
});

希望对您有所帮助。