从函数中获取价值

Posted

技术标签:

【中文标题】从函数中获取价值【英文标题】:Getting value from a function 【发布时间】:2018-04-18 16:49:42 【问题描述】:

我的代码有效,但不是我想要的。 不和谐的输出是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`);

【问题讨论】:

【参考方案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 语句中使用变量。

以上是关于从函数中获取价值的主要内容,如果未能解决你的问题,请参考以下文章

如何从订阅内部函数中获取价值?离子 3

jQuery插件如何从插件内的函数中获取价值

无法从函数中获取价值,即使我有一个非常相似的函数。 - 颤振

如何从 Django 视图中获取价值到 Ajax 成功函数中

Alamofire 和 SwiftyJSon 在请求函数之外获得价值

Flutter:从 Future 中获取价值的正确方法