Как получить значение из запроса MySQL вне оператора запроса?

0

Вот эта функция, как показано ниже console.log

function quo (value){
    value = connection.query(
       'SELECT role from 'roles' where 'id' = 1' , 
       function (error, results, fields) {
           if (error) throw error;
           console.log('The role is: ', results[0].role);// result here The role is : admin
          });
    console.log(value);
}

Результат здесь - объект запроса Query {domain: null, _events: {error:.. etc} ##

Я вызываю это так:

quo();
Теги:

2 ответа

0
Лучший ответ

tl; dr все происходит в обратном вызове.

Вы отключаетесь от асинхронного характера Javascript. К тому времени ваш console.log(value); вызов выполняется, запрос не завершен (обязательно). Таким образом, в то время нет возможности получить результат запроса.

Многие разработчики используют шаблон, подобный этому, с функцией обратного вызова для обработки следующего шага при достижении результата запроса.

function quo (success){
    value = connection.query(
       'SELECT role from 'roles' where 'id' = 1' , 
       function (error, results, fields) {
           if (error) throw error;
           console.log('The role is: ', results[0].role);
           success (results[0].role);
       });
}

quo (function (role) {
   console.log(role);
   /* do something useful with the role that came back from the query */
});

Объекты Promise делают эту вещь проще читать в node.js. Но объяснение их в любом случае выходит за рамки ответа на переполнение стека.

  • 0
    Спасибо, это очень полезно .. моя главная цель - проверить значение логина пользователя с записями базы данных .. чтобы я мог передать это значение из самого запроса
0
function quo (success){
    value = connection.query(
       'SELECT role from 'roles' where 'id' = 1' , 
       function (error, results, fields) {
           if (error) throw error;
           console.log('The role is: ', results[0].role);
           success (results[0].role);
       });
}

quo (function (role) {
   console.log(role);
   /* do something useful with the role that came back from the query */
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню