函数返回“未定义”

时间:2019-08-08 00:52:21

标签: javascript

当我等待“结果”时,我的函数返回“未定义”。有什么问题吗?

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返回未定义

1 个答案:

答案 0 :(得分:1)

您正对SQL注入攻击敞开大门

请勿执行以下操作:"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);
}