【问题标题】:Getting value from a function从函数中获取价值
【发布时间】:2023-03-18 17:45:01
【问题描述】:

我的代码有效,但不是我想要的。 不和谐的输出是Your name is undefined。 我希望它是Your name is Boanak。我需要它是从表中获得的值。

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

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}`);

【问题讨论】:

    标签: node.js sqlite discord


    【解决方案1】:

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

    我认为你必须这样做:

    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");
        }
    });
    

    希望对你有帮助。

    【讨论】:

    • 我以前有过,但它没有满足我的需求 :(!我需要的是在这种情况下 (z) 中的变量是它从函数 (Boanak) 获得的值所以我可以稍后在 if 语句中使用它
    • 我刚试了一下,它的工作效率为 50%。当未找到 Nameid 时,它不会在控制台中显示任何内容。我添加了一个,message.channel.send("Your ID cant be found")。
    【解决方案2】:

    message.channel.send(Your Name is ${z}); 代码 id 中的问题在查询返回结果之前被执行,因此输出 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}`);
    });
    

    【讨论】:

    • 有了这个我得到你的名字是[object Object]。我想要的是 z= Boanak ,这样我就可以在 if 语句中使用变量。
    猜你喜欢
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 2017-11-13
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    相关资源
    最近更新 更多