从函数中获取变量到其他函数中(在同一函数下)
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() {
...
})
我是 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() {
...
})