Может кто-нибудь объяснить мне, как я могу получить доступ к значению переменной, когда я нахожусь внутри функции обратного вызова? - PullRequest
0 голосов
/ 25 мая 2019

У меня есть эта функция, которая вызывается всякий раз, когда пользователь вводит «/ 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;
}
...