2013-08-21 10 views
17

Mam następujących funkcji, która pobiera hexcode z bazynode.js powracający wynik z zapytania MySQL

function getColour(username, roomCount) 
{ 
    connection.query('SELECT hexcode FROM colours WHERE precedence = ?', [roomCount], function(err, result) 
    { 
     if (err) throw err; 
     return result[0].hexcode; 
    }); 
} 

Moim problemem jest to, że wracam wynik w funkcji zwrotnej ale funkcja getColour nie zwrócić wszystko. Chcę, aby funkcja getColour zwróciła wartość result[0].hexcode.

W chwili gdy zadzwoniłem getColour niczego nie

Próbowałem robić coś podobnego

function getColour(username, roomCount) 
{ 
    var colour = ''; 
    connection.query('SELECT hexcode FROM colours WHERE precedence = ?', [roomCount], function(err, result) 
    { 
     if (err) throw err; 
     colour = result[0].hexcode; 
    }); 
    return colour; 
} 

ale oczywiście zapytanie SELECT zakończy do czasu powrotu wartości w zamian colour

Odpowiedz

37

Musisz wykonać przetwarzanie wyników z zapytania db tylko na oddzwonieniu. Tak jak.

function getColour(username, roomCount, callback) 
{ 
    connection.query('SELECT hexcode FROM colours WHERE precedence = ?', [roomCount], function(err, result) 
    { 
     if (err) 
      callback(err,null); 
     else 
      callback(null,result[0].hexcode); 

    }); 

} 

//call Fn for db query with callback 
getColour("yourname",4, function(err,data){ 
     if (err) { 
      // error handling code goes here 
      console.log("ERROR : ",err);    
     } else {    
      // code to execute on data retrieval 
      console.log("result from db is : ",data); 
     }  

}); 
+0

Dzięki chociaż nadal mam ten sam problem, w którym nie można przypisać wynik zwrotnego do zmiennej (np var color = getColour (...? - Czy to możliwe – Pattle

+0

'kolor var = getColour ("nie jest możliwe, ale nadal możesz zachować kolor jako zmienną globalną i ustawić ją z powrotem, ale jeśli chcesz wywołać rzeczy po zakończeniu pobierania db, musisz umieścić je w oddzwonieniu." – mithunsatheesh

+0

thnak you @mithunsatheesh. Jak mogę uzyskać dostęp do danych spoza getColour? – Diamond