我有一个项目,将通过CentOS7中安装的mosquitto(mqtt)传递的每条消息存储到mysql数据库。我使用 Nodejs 来存储传递的消息。
然后我在我的网站上显示该消息。我使用“添加设备”功能根据每个设备的总数据在数据库中添加新表。 (如果我有名为“device1”的设备存储温度和湿度,它将创建名为“device1”的新表和 3 列、id、湿度和温度。)
我有一个问题。我想在javascript中的查询mysql中使用回调函数中的“结果”变量。我想在该函数之外使用该变量。
这是代码:
var sql= "SELECT count(*) AS hitung FROM information_schema.columns WHERE table_name = 'device' ";
connection.query(sql, function (error, results) {
if (error) throw error;
console.log(results[0].hitung);
});
基于我上面给出的示例(device1)。 Console.log 将打印“3”(因为有 3 列)。
我想在另一个函数中使用它(结果[0].hitung值),例如:
function example() {
for (i=1; i<=results[0].hitung; i++) {
console.log(i);
};
};
但它显示错误,我可以使用该变量。 我是网站开发新手,因为我只对网络感兴趣。 抱歉我的英语不好,希望你理解我的问题。我是这个社区的新人。谢谢。
最佳答案
I want to use it (the results[0].hitung value) in another function like
为此,您需要从 query
回调函数中调用 example
,就像您对 console.log
所做的那样,例如:
connection.query(sql, function (error, results) {
if (error) throw error;
example(results); // <===
});
那是因为:
results
的范围仅限于该回调,并且- 您必须等待回调才能得到结果
您可能会考虑使用 promises ,并使用 async
functions (创建并消耗 promise )。您可以使用util.promisify
将 Node 回调式函数转换为 Promise,尽管大多数 API 都在积极采用 Promise,并且还有许多其他 API 的 Promise 包装库(例如,mysql-promise
用于 mysql
和 mysql2
)。这可能会有所帮助,因为允许您使用仅适用于同步代码的标准流控制机制来编写异步代码。
关于javascript - 如何在另一个函数(Nodejs mysql)中的查询mysql中使用 "results"变量(回调函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57901157/