Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment renvoyer le rappel de la requête MySQL et pousser vers un tableau dans Node.js ?

Votre méthode getWord est asynchrone !

Donc la deuxième console.log(wordList); est imprimé avant que les résultats ne soient renvoyés (avant même que vous n'appeliez wordList.push(result); pour la première fois)

Aussi depuis que vous interrogez db (qui est asynchrone) dans getParrotMessage fonction, vous devez utiliser le rappel (ou la promesse ou tout ce qui peut être utilisé) au lieu de l'instruction de retour.

function getParrotMessage(callback) {

    getWord('result', function (err, result) {

        if(err || !result.length) return callback('error or no results');
        // since result is array of objects [{word: 'someword'},{word: 'someword2'}] let's remap it
        result = result.map(obj => obj.word);
        // result should now look like ['someword','someword2']
        // return it
        callback(null, result);

    });
}

function getWord(word, callback) {
    con.query('SELECT * FROM word_table', function(err, rows) {
        if(err) return callback(err);
        callback(null, rows);
    });
};

maintenant, utilisez-le comme ça

getParrotMessage(function(err, words){
    // words => ['someword','someword2']

});