从函数中获取变量到其他函数中(在同一函数下)

Fetch variable from function into other function (under same function)

我是 Javascript、nodejs 和 socket io 的新手,到目前为止一切正常,直到我需要一个新函数来从多个 table 中提取数据,而不仅仅是一个 table,当它只有一个 table 时它工作正常,因为我可以从函数内部发出,但是这个新函数需要增加一个数字几次然后发出它,但出于某种原因我无法从查询函数中获取的数据中增加它。

这是我的功能

socket.on("db_rows", function() {
    setInterval(function() {
        
        var rows = 0;
        
        connection.query("SELECT COUNT(id) AS c FROM `systemusage`", function(error, result) {
            rows += result[0].c;
        });
        
        connection.query("SELECT COUNT(id) AS c FROM `temperature`", function(error, result) {
            rows += result[0].c;
        });
        
        connection.query("SELECT COUNT(id) AS c FROM `bmp280`", function(error, result) {
            rows += result[0].c;
        });
        
        console.log(rows);
        
        //var rows = (dbs.a + dbs.b + dbs.c);
        
        var value = (rows).toLocaleString(
            undefined,
            { minimumFractionDigits: 0 }
        );
            
        io.emit("db_rows", value);
    }, 2000)
});

rows 变量没有增加,这意味着 rows 始终为 0,我想不出在查询函数之外获取获取数据的方法,有人可以指导我吗方向对吗?

编辑:我一直在谷歌搜索,但 none 的答案对我有帮助。

将查询合并为一个 SELECT 怎么样?喜欢

connection.query("
    SELECT * FROM (
        SELECT COUNT(id) AS c FROM `systemusage`
        +
        SELECT COUNT(id) AS c FROM `temperature`
        +
        SELECT COUNT(id) AS c FROM `bmp280`
    ) c
    ", function(error, result) {
            rows = result[0];
        });

connection.query 不等待结果,因此所有三个调用都将立即执行,并且在行 console.log(rows); 上您不会获得正确的累加值。
您要么需要将所有三个调用包装到 promise 中,要么使用它们的异步对应项(如果有的话)。

await new Promise((resolve, reject) => {
  connection.query("SELECT COUNT(id) AS c FROM `systemusage`", function(error, result) {
          if (error) {
             reject(error);   
          }
            rows += result[0].c;
            resolve();
        });  
})

您还需要指出 setInterval 的回调现在是一个异步函数:

setInterval(async function() {
...
})