【问题标题】:js doesnt execute extern function to recieve data from dbjs不执行外部函数从db接收数据
【发布时间】:2023-03-06 21:33:01
【问题描述】:

我正在尝试从我的 MySQL (MariaDB) 服务器接收相同的版本数据。 为了更好地维护,我创建了一个连接对象来处理所有数据库查询。 但是当我查询一些数据时,它似乎没有及时执行,而是稍后出现第一个等待命令时。

dbControl.js:

var mysql = require('mysql'); 

function getConnection(){      

    let dbConnection = mysql.createConnection({
        host: "localhost",
        user: "root",
        password: ""
      });
              
    dbConnection.connect(function (err) {
        if (err) throw err;
    });

    this.get_version = function() {
        let sql = 'SELECT * FROM versionControl ORDER BY id DESC LIMIT 1;' 
        dbConnection.query(sql, function (err, result) {
            if (err) throw err;
            console.log("vData:", result);
            return result;

        });
        
    }

}

module.exports.getConnection = getConnection;

dataHandler.js:

const browserControl = require('./browserControl');
const dbControl = require('../db/dbControl');

const dbConnection = new dbControl.getConnection();

let versionData;
// Here it should be executed -->
versionData = dbConnection.get_version();

console.log(versionData);


async function get_something(){

    // Here it is executed -->
    const browser = await browserControl.startBrowser();

    //......
}

有一个简单地控制程序的第 3 个文件。目前它只是执行 get_something() 函数,例如:

const originData = require('./dataHandler.js');


let data = originData.get_something();
console.log(data);

P.s.: 都是用 node 运行的,在此先感谢 ;_)

【问题讨论】:

    标签: javascript mysql sql node.js object


    【解决方案1】:

    您的 get_something() 被标记为异步。
    使用await get_something()get_something().then(console.log) 调用它。

    【讨论】:

    • 如果我这样做,我会得到:“SyntaxError: await is only valid in async function”
    • 好的。将其包装为:` ;(async () => {... call here})()`
    • 仍然没有立即执行,仍然是console.log(versionData);给我“未定义”。老实说,我不明白异步应该如何帮助这个地方,因为在我看来,我不喜欢等待执行空洞过程,但我想在过程中的某个时刻等待执行。
    【解决方案2】:

    好的,我有一个解决方案。 SQL 查询函数现在返回一个承诺,我创建了一个额外的“getVersion”-async-function,它正在等待承诺的解决。因此,promise 等待 db 回答,其余的等待直到 promise 被解决。

    dataHandler.js 现在看起来像这样:

    const browserControl = require('./browserControl');
    const dbControl = require('../db/dbControl');
    
    const dbConnection = new dbControl.getConnection();
    
    async function getVersion() {
        let versionData;
        versionData = await dbConnection.get_version();
        console.log(versionData);
    }
    
    getVersion();
    
    
    async function get_something(){
            
        const browser = await browserControl.startBrowser();
    
    }
    

    查询函数现在看起来像这样:

     this.get_version = function() {
    
            let sql = 'SELECT * FROM versionControl.lol_scraper ORDER BY id DESC LIMIT 1;' 
    
            return new Promise(resolve => {
                dbConnection.query(sql, function (err, result) {
                    if (err) throw err;
                    console.log("vData:", result);
                    resolve(result);
                })
                
            });
    

    P.s.:仍然对更智能或更现代的解决方案开放;_)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-13
      • 2012-03-24
      相关资源
      最近更新 更多