我有一个项目,用于存储通过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);
};
};
但是它显示错误,我可以使用该变量。 我是网站开发的新手,因为我只对网络感兴趣。 对不起,我的英语不好,希望您能理解我的问题。我是这个社区的新手。谢谢。
答案 0 :(得分:1)
我想在另一个函数中使用它(结果[0] .hitung值)
为此,您需要从example
回调函数中调用query
,就像使用console.log
一样,例如:
connection.query(sql, function (error, results) {
if (error) throw error;
example(results); // <===
});
那是因为:
results
的作用范围是该回调,并且您可能会考虑使用promises和async
functions(它们会创建和使用承诺)。您可以使用util.promisify
将Node回调样式的函数转换为Promise,尽管大多数API都在积极采用Promise,并且还有许多其他APIS的Promise包装库(例如,{{ 1}}和mysql
)。通过允许您使用仅用于同步代码的标准流控制机制编写异步代码,可能会有所帮助。
答案 1 :(得分:0)
您可以像这样向函数添加参数:
app.config['MONGODB_HOST'] = 'mongodb://<username>:<password>@host:port/DB_NAME?ssl=true&replicaSet=replicaSetName'
然后您从查询回调中调用函数:
function example(results) {
for (i=1; i<=results.length; i++) {
console.log(results[0].hitung)
};
};