How to save the result of MySql query in variable using node-mysql

im trying to save the result of MySql query in variable using node-mysql model and node.js so i have this code:

connection.query("select * from ROOMS", function(err, rows){
if(err) {
    throw err;
} else {
    console.log(rows);
}
});

and the result is :

[ { idRooms: 1, Room_Name: 'dd' },
  { idRooms: 2, Room_Name: 'sad' } ]

so i need to store this results in variable so i try like this:

 var someVar = connection.query("select * from ROOMS", function(err, rows){
if(err) {
    throw err;
} else {
    return rows;
}
});

console.log(someVar);   

but is not working thanks for any help in advance.

You can't do that because network i/o is asynchronous and non-blocking in node.js. So any logic that comes afterwards that must execute only after the query has finished, you must place inside the query's callback. If you have many nested asynchronous operations you may look into using a module such as async to help better organize your asynchronous tasks.

Well @Fadi, connection.query is async, which mean when your call your console.log(someVar), someVar has not been set yet.

What you could do:

var someVar = [];

connection.query("select * from ROOMS", function(err, rows){
  if(err) {
    throw err;
  } else {
    setValue(rows);
  }
});

function setValue(value) {
  someVar = value;
  console.log(someVar);
}

Here is your answer if you want to assign a variable Res.render: (but comments turkish)

//Önce render'a atacağımız sıradan değişkenleri bi belirtelim
var tum_render = [];
tum_render.title = "Turan";
tum_render.description = "Turan'ın websitesi";

//Daha sonra kullanacağımız sql sorgularını sorgular ayrı isimler ayrı olmak üzere belirtelim
var rastgeleQuery = "SELECT baslik,hit FROM icerik ORDER BY RAND() LIMIT 1";
var son5Query = "SELECT baslik,hit FROM icerik LIMIT 5";

var query_arr = [rastgeleQuery, son5Query];
var query_name = ['rastgele', 'son5'];

//bilgileri tanımladık şimdi fonksiyonları yazalım onlar da şöyle:

//veritabanı sorgusu yapacak fonksiyon
function runQuery(query_arr,sira){
    connection.query(query_arr[sira], function(err, rows, fields) {
        if (err) throw err;
        var obj = [];
        obj[query_name[sira]] = rows;
        sonuclar.push(obj);
        if (query_arr.length <= sira+1){
            sonuc();
        }else{
            runQuery(query_arr, sira+1);
        }
    });
 }

//iki veya daha fazla objecti birleştiren fonksiyon kaynak: http://stackoverflow.com/questions/2454295/javascript-concatenate-properties-from-multiple-objects-associative-array
function collect() {
      var ret = {};
      var len = arguments.length;
      for (var i=0; i<len; i++) {
        for (p in arguments[i]) {
          if (arguments[i].hasOwnProperty(p)) {
            ret[p] = arguments[i][p];
          }
        }
      }
      return ret;
}

//runQuery sonuçlandığında çalıştırılacak fonksiyon bi nevi callback
function sonuc(){
        for(var x = 0; x<=sonuclar.length-1; x++){
            tum_render = collect(tum_render,sonuclar[x]);
        }
    console.log(tum_render);
    res.render('index', tum_render);
}

//Tüm bu kodlar [router.get('/' ....] içerisinde denendi. Node.js + Express Jade ve Mysql2 kütüphaneleri kullanıldı.