有人可以解释一下我在回调函数中时如何访问变量值吗?

时间:2019-05-25 16:03:07

标签: javascript telegram-bot node-sqlite3 node-telegram-bot-api

我具有此函数,只要用户在漫游器中键入“ / play”或“ / register”,就会调用该函数,该函数用于查询数据库,无论用户是否已经在数据库中存储了数据。

我正在尝试使此函数返回true或false,但它无法正常运行。它总是返回false。

希望有人可以向我解释原因,在此先感谢! [我为我的英语不好而道歉]

我试图将“ let res = false”设置为全局变量,并在回调函数中更改其值(此方法有效,但仅在第一次执行该方法时[不知道为什么,如果有人向我解释这个很好]]。

我试图在“ isRegistered”函数内部初始化变量(如下面的代码所示),但是在回调函数内部似乎无法访问该变量。

function isRegistered(id){
let res = false;
db.all('SELECT iduser FROM users WHERE iduser = ?', [id], (err, rows) => {
    if (err)
        console.log(err);
    if( rows != null)
        res=true;
    else res = false; 
});
return res;
}

api.on('message', function(message) {

var chat_id = message.chat.id;
var text = message.text;
switch(text){
    case '/register':
            if (isRegistered(chat_id)){
                api.sendMessage({
                    chat_id: message.chat.id,
                    text: 'You are already registered.'
                });
            }else{
                insertRow(chat_id);
                api.sendMessage({
                    chat_id: message.chat.id,
                    text: 'Now you are registered.'
                });
            }break;
....
....
}
}

我期望回调函数更改“ res”变量的值。

我尝试了下面的代码,这是使其起作用的唯一方法。我不明白为什么...我很绝望

function isRegistered(id){
let res = false;
db.all('SELECT iduser FROM users WHERE iduser = ?', [id],(err, rows ) => {
    if (err){
        console.log(err);
    }
    rows.forEach( (row) => {
        if(id == row.iduser) {
            res = true;
        }
    });
});
return res;
}

0 个答案:

没有答案