2013-08-21 4 views
17

Ho la seguente funzione che riceve una hexcode dal databaseNode.js risultato di ritorno dalla query 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; 
    }); 
} 

mio problema è che sto tornando il risultato nella funzione di callback, ma la funzione getColour non lo fa restituire qualsiasi cosa. Voglio che la funzione getColour restituisca il valore di result[0].hexcode.

Nel momento in cui ho chiamato getColour non restituisce nulla

Ho provato a fare qualcosa di simile

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; 
} 

ma naturalmente la query SELECT ha finito per il momento restituire il valore in colour

risposta

37

È necessario eseguire l'elaborazione sui risultati dalla query db solo su un callback. Proprio come.

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

Grazie anche se ho ancora lo stesso problema dove non posso assegnare il risultato della richiamata ad una variabile (ad esempio var color = getColour (... -? Questo è possibile – Pattle

+0

'colore var = getColour (.' non è possibile, ma puoi comunque mantenere il colore come variabile globale e impostarlo dal callback, ma se vuoi attivare il completamento di db fetch, devi metterli nella callback. – mithunsatheesh

+0

thnak you @mithunsatheesh. Come posso accedere ai dati dall'esterno getColour? – Diamond