我有一个项目,将每条通过安装在 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);
});
基于我上面给出的示例(设备1(。控制台.log将打印"3"(因为有 3 列(。
我想在另一个函数中使用它(结果[0].hitung值(,例如:
function example() {
for (i=1; i<=results[0].hitung; i++) {
console.log(i);
};
};
但它显示错误,我可以使用该变量。 我是网站开发的新手,因为我只对网络感兴趣。 对不起,我的英语不好,希望你能理解我的问题。我是这个社区的新手。谢谢。
我想在另一个函数中使用它(结果[0].hitung值(,例如
为此,您需要从query
回调函数中调用example
,就像使用console.log
一样,例如:
connection.query(sql, function (error, results) {
if (error) throw error;
example(results); // <===
});
这是因为:
results
的作用域为该回调,并且- 您必须等待回调才能获得结果
您可以考虑使用承诺,以及使用async
函数(创建和使用承诺(。您可以使用util.promisify
将 Node 回调样式的函数转换为 promise,尽管大多数 API 都在积极采用 promise,并且许多其他 API 都有 promise 包装库(例如,mysql-promise
用于mysql
和mysql2
(。这可能有助于您使用过去仅适用于同步代码的标准流控制机制编写异步代码。
您可以像这样向函数添加参数:
function example(results) {
for (i=1; i<=results.length; i++) {
console.log(results[0].hitung)
};
};
然后从查询回调调用该函数:
connection.query(sql, function (error, results) {
if (error) throw error;
example(results);
});