web-dev-qa-db-fra.com

Node.js renvoyant le résultat d'une requête MySQL

J'ai la fonction suivante qui obtient un code hexadécimal de la base de données

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

Mon problème est que je renvoie le résultat dans la fonction de rappel, mais la fonction getColour ne renvoie rien. Je veux que la fonction getColour renvoie la valeur de result[0].hexcode.

Au moment où j'ai appelé getColour ça ne retourne rien

J'ai essayé de faire quelque chose comme

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

mais bien sûr, la requête SELECT est terminée au moment où retourner la valeur dans colour

22
Pattle

Vous devez effectuer le traitement des résultats de la requête db uniquement lors d'un rappel. Juste comme.

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

});
53
mithunsatheesh