NPM-MYSQL-将查询结果传递给另一个变量

时间:2020-07-24 05:50:28

标签: mysql node.js npm

我一直在寻找有关为大型应用程序构建的数据库包的帮助。该应用程序实质上将通过使用npm中的mysql包将某些信息保留在数据库中。我面临的问题是,当我尝试将结果变量传递给我创建的变量时,我总是无法定义。尽管如果我在显示结果变量的变量transfer语句下面放置一个log语句,它将被正确填充。我已经做了大量的研究,并且相信这与Promise和/或查询中的回调函数有关。我想知道是否有人可以检查我的代码并让我知道最佳的操作方法。我已经花了几个小时在网上进行研究,并尝试了各种解决方案,但没有任何效果。

const mysql = require("mysql");
var sqlResults;

var pool = mysql.createPool({
      host: "example.com",
      user: "exampleUser",
      password: "123456Password",
      database: "TestDB"
    }); 

module.exports = {

...

databaseSelect: function(table, fields, conditionalStmt) {
        pool.getConnection(function(err, connection) {
          if (err) 
            throw err;
          console.log("Connected to the example DB!");
          
          var sql = "SELECT " + fields + " FROM " + table + " " + conditionalStmt;
          
            connection.query(sql, function(error, results, fields) {
                console.log("Successfully retrieved records from " + table + "\n\t" + sql);
                sqlResults = results;
                connection.release();

                sqlResults = results;
                console.log(results);
                
                if (error) 
                    throw error;
            });
        });
        console.log(sqlResults);
        return sqlResults;
    }
}

这是我收到的输出示例:

I am ready!
undefined
undefined
Connected to the example DB!
Successfully retrieved records from User_Level_Info
        SELECT HashID, Level, Experience FROM User_Level_Info WHERE HashID = 'e578059cabc6f937f0219127384126143e272acbac52c331345d573e0f085d21'
[ RowDataPacket {
    HashID: 'e578059cabc6f937f0219127384126143e272acbac52c331345d573e0f085d21',
    Level: 1,
    Experience: 0 } ]

1 个答案:

答案 0 :(得分:0)

将其转换为Promise

因此,它将等待直到获得resolvedreject

databaseSelect: function(table, fields, conditionalStmt) {
  return new Promise(function(resolve, reject) {
        pool.getConnection(function(err, connection) {
          if (err) 
            return reject(err);
          console.log("Connected to the example DB!");
          
          var sql = "SELECT " + fields + " FROM " + table + " " + conditionalStmt;
          
            connection.query(sql, function(error, results, fields) {
                console.log("Successfully retrieved records from " + table + "\n\t" + sql);
                sqlResults = results;
                connection.release();

                sqlResults = results;
                console.log(results);
                
                if (error) 
                    return reject(error);
            });
        });

        resolve(sqlResults);
  });
}

//call your function
databaseSelect(params)
  .then(function(rows) {
    console.log(rows)
  })
  .catch((err) {
    console.log(err)
  }); // Throw async to escape the promise chain
相关问题