0

Возникла проблема с возвратом результата выборки из базы данных MySQL. Суть проблемы заключается в следующем - как видно из кода ниже имеется некая функция func() в которой выполняется запрос к базе данных. Результат запроса нужно записать в переменную res, но после выполнения функции переменная остается пустой. Причем если попытаться вывести в консоль переменную rows или res непосредственно в теле переданной в connection.query анонимной функции,то выборка отображается. Подскажите как правильно записать результат во внешнюю переменную и возможно ли это вообще.

В JavaScript и Node.js новичок

function func(){
    var res;
    connection.query(query,function(err,rows,fields){
        if(err)
            throw err
        res = rows;
    });
    //сделать что-нибудь с res
}
Dmitriy Simushev
  • 17,999
  • 5
  • 49
  • 85

3 Answers3

1

Вы попались в типичную ловушку новичков: JavaScript код имеет асинхронную природу.

В вашем коде вы передаете методу connection.query вторым аргументом функцию обратного вызова, которая будет вызвана только тогда когда будут получены данные от базы данных. Поток выполнения при этом сразу же переходит к инструкциям, расположенным после вызова connection.query. В этом участке кода, данные от БД еще не получены, поэтому вы не можете с ними работать. Совсем.

Самым простым решением вашей проблемы является обработка данных БД в функции обратного вызова, переданной в connection.query.

Dmitriy Simushev
  • 17,999
  • 5
  • 49
  • 85
0

node.is асинхронен по сути своей. Данные есть только в каллбеке

Photon
  • 2,927
  • 11
  • 8
-1

Попробуйте так:

function func(){
  var res;
  connection.query(query,function(err,rows,fields){
    if (err) throw err;
    else res = rows;
  });
  console.log(res)
}
Zhukov Roman
  • 9,085
  • чтобы вывести результат в консоль нужно чтобы res заполнился данными,но этого не происходит – sanchez17_08 Dec 27 '12 at 17:57