Переменная не изменяется в функции Javascript - PullRequest
0 голосов
/ 22 января 2020

Я написал некоторый код, в котором у меня есть переменная, которая изменяется, если я введу оператор if внутри функции запроса sql. Однако функция не изменяется глобально только локально. Код следующий:

app.post("/energy/api/Admin/users", function(req,res)
        var correct=0
        sql.query(`SELECT apikey,privileges FROM users WHERE apikey=?`,[req.user.apikey],(err,res1) => {
            if (err) {
                console.log("error: ", err);
                result(err, null);
                return;
            }
            else if (res1.length && res1[0].privileges=="superuser"){
                console.log("Apikey correct");
                correct=1;
            }       
            else  correct=0;
        });
        console.log(correct);
        if (correct==1){
                 ....
                }

Примечание: if (правильное == 1) никогда не происходит, даже если для правильного значения установлено значение 1 внутри функции запроса. Я думаю, что это не должно происходить с переменными в javascript. Почему это происходит?

Ответы [ 2 ]

0 голосов
/ 22 января 2020

Функция запроса действительно асинхронная. Самый простой способ - работать с asyn c await, который обрабатывает ответы на обещания. Вы можете попробовать это:

  app.post("/energy/api/Admin/users", async function(req,res)
            var correct=0
           let response = await sql.query(`SELECT apikey,privileges FROM users WHERE apikey=?`,[req.user.apikey]);
// then here you can check for the response if its an error and so on
                if (response) {
                    console.log("response: ", response);
                  //... your code now you can use the response without thiunking of asynchronity
0 голосов
/ 22 января 2020

Измените его в стиле обещания, так как вы пытаетесь получить доступ к значению еще до его установки. код будет выглядеть так

app.post("/energy/api/Admin/users", async function (req, res) {
  const correct = await getResults(req.user.apikey);
  console.log(correct);
  if (correct == 1) {
  }
});

function getResults(key) {
  return new Promise((resolve, reject) => {
    sql.query("SELECT apikey,privileges FROM users WHERE apikey=?", [key], (err, res1) => {
      if (err) {
        console.log("error: ", err);
        reject(err);
      } else if (res1.length && res1[0].privileges == "superuser") {
        console.log("Apikey correct");
        resolve(1);
      } else {
        resolve(1);
      }
    });
  });
}


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...