【问题标题】:NPM - MYSQL - Passing query results to another variableNPM - MYSQL - 将查询结果传递给另一个变量
【发布时间】:2020-11-13 23:12:27
【问题描述】:

我正在寻求有关我正在为更大的应用程序构建的数据库包的一些帮助。该应用程序本质上将通过使用 npm 中的 mysql 包将某些信息保存在数据库中。我面临的问题是,当我尝试将结果变量传递给我创建的变量时,我总是不确定。尽管如果我在显示结果变量的变量传输语句下方放置一个日志语句,它将被正确填充。我已经进行了大量研究,并认为这与作为查询一部分的承诺和/或回调函数有关。我想知道是否可以让某人检查我的代码并让我知道最佳行动方案。我花了几个小时在线研究并尝试各种解决方案,但没有任何效果。

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 } ]

【问题讨论】:

  • 你必须等到你得到结果。请改用 Promise。
  • 您愿意详细说明吗?在这种情况下不能使用 async/await 是否有原因
  • 我已将其转换为承诺。更新了我的答案。

标签: mysql node.js npm


【解决方案1】:

这里将其转换为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

【讨论】:

  • 我已经尝试实施解决方案,当我遇到问题时得到以下错误“参数列表后缺少)”。当我将 catch 语句保留为 .catch() 时,我得到以下输出 Promise { <pending> }。我还问过如何将结果传递给一个甚至不会触及的外部变量。您的回答没有任何帮助,并且某种解释会很棒
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
  • 2021-02-04
  • 2016-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多