当我等待“结果”时,我的函数返回“未定义”。有什么问题吗?
getUserDictionary = (user_id) => {
connection.connection.query("SELECT eng_word, ru_word FROM `dictionary` where user_id="+user_id,
function (error, results, fields) {
if (error) throw error;
console.log(results);
return results;
});
}
console.log(getUserDictionary(1));
“结果”显示我想要的内容(数据库连接没有问题)。 但是最后一个带有功能的console.log返回未定义
答案 0 :(得分:1)
请勿执行以下操作:"SELECT eng_word, ru_word FROM dictionary where user_id="+user_id
如果这只是一个宠物项目,那么很好,但是如果您将其打开,则任何人都可以删除您的数据库。请改用准备好的语句。如果您使用的是mysqljs,则可以将其替换为当前查询:
connection.query('SELECT eng_word, ru_word FROM dictionary WHERE user_id = ?', [user_id], function (error, results, fields) {
您的问题是connection.connection.query()
是一个异步函数。如果您希望它同步运行,则可以使用ES6支持的async/await
模式。否则,您可以构建代码以对来自query()
的返回结果进行响应。 。
这是使用async/await
的样子:
getUserDictionary = (user_id) => {
return new Promise((resolve, reject) => {
connection.connection.query("blah blah blah",
function (error, results, fields) {
if (error) {
reject(error);
return;
}
console.log(results);
resolve(results);
});
});
};
您可以使用like
async () => {
let results = await getUserDictionary(0);
console.log(results);
}