sql >> Databáze >  >> RDS >> Mysql

Jak vrátím zpětné volání dotazu MySQL a push do pole v Node.js?

Vaše metoda getWord je asynchronní !

Takže druhý console.log(wordList); se vytiskne dříve, než se vrátí jakékoli výsledky (než zavoláte wordList.push(result); poprvé)

Také proto, že dotazujete db (který je asynchronní) v getParrotMessage musíte místo příkazu return použít callback (nebo Promise nebo cokoli jiného, ​​co lze použít).

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

nyní jej použijte takto

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

});



  1. Jak nastavím výchozí hodnotu datového typu výčtu MySQL na „Ne“?

  2. Vytvoření uložené procedury:nastavení znakové sady a řazení

  3. Získání metadat tabulky v MySQL

  4. Správný databázový model pro systém zpětné vazby od uživatelů (zajímavý případ)