繁体   English   中英

如何在另一个函数(NodeJS mysql)的查询MySQL中使用“结果”变量(回调函数)

[英]How to use “results” variable (callback function) inside query mysql in another function (Nodejs mysql)

我有一个项目,用于存储通过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列)。

我想在另一个函数中使用它(results [0] .hitung值):

function example() {
    for (i=1; i<=results[0].hitung; i++) {
        console.log(i);
    };
};

但是它显示了错误,我可以使用该变量。 我是网站开发的新手,因为我只对网络感兴趣。 对不起,我的英语不好,希望您能理解我的问题。 我是这个社区的新手。 谢谢。

我想在另一个函数中使用它(results [0] .hitung值)

为此,您需要从query回调函数中调用example ,就像使用console.log ,例如:

connection.query(sql, function (error, results) {
    if (error) throw error;
    example(results); // <===
});

那是因为:

  1. results仅限于该回调,并且
  2. 您必须等待回调才能获得结果

您可能会考虑使用Promise和使用async函数 (创建和使用Promise)。 您可以使用util.promisify将Node回调样式的函数转换为util.promisify ,尽管大多数API都在积极采用util.promisify ,并且还有许多其他APIS的Promise包装库库(例如, mysql-promise用于mysqlmysql2 )。 通过允许您使用仅用于同步代码的标准流控制机制编写异步代码,可能会有所帮助。

您可以像这样向函数添加参数:

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);
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM