我正在尝试使用MYSQL查询在一个表中填充数组,该表占用所有行并将行推送到WordList。
我可以在方法中打印每一行,但是当我超出该方法的范围时,它不会将任何内容推送到Wordlist。
function getParrotMessage() {
wordList = [];
console.log(wordList);
// Implementation
getWord('result', function (err, result) {
console.log(result); // works, prints the row data in MySQL table
wordList.push(result); // doesn't work
});
console.log(wordList);
return parrot_message;
}
// Method
function getWord(word, callback) {
var query = con.query('SELECT * FROM word_table');
query.on('result', function (row) {
callback(null, row.word);
});
};
wordlist:[]
wordlist显示为空数组。
任何帮助都会非常感激,只需从javascript和node.js
开始答案 0 :(得分:2)
你的方法getWord是异步!
所以在返回任何结果之前打印第二个console.log(wordList);
(在您第一次调用wordList.push(result);
之前)
此外,由于您在 getParrotMessage 函数中查询db(这是异步的),您需要使用回调(或Promise或其他任何可以使用的东西)而不是return语句。
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);
});
};
现在就像这样使用它
getParrotMessage(function(err, words){
// words => ['someword','someword2']
});