javascript - 如何在另一个函数(Nodejs mysql)中的查询mysql中使用 "results"变量(回调函数)

标签 javascript mysql node.js

我有一个项目,将通过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); // <===
});

那是因为:

  1. results 的范围仅限于该回调,并且
  2. 您必须等待回调才能得到结果
<小时/>

您可能会考虑使用 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/

相关文章:

mysql - CI 中的 Join() 替换 key ID

javascript - hero.service.ts Angular v5 英雄之旅教程中箭头函数 (_=>) 前面的下划线是什么?

javascript - 如何在功能组件中访问 DOM

javascript - 无法更改 body 元素的 html

mysql - 如何在mysql中为派生列指定列类型和长度

python - 加载数据本地 infile 在 Ubuntu 14.4 LTS 中不起作用

javascript - 为相位器游戏添加 requirejs 后未调用 Typescript window.onload

javascript - 带控制台/Node 的 Elm 中的 Hello World

node.js - 如何在StrongLoop(LoopBack)中获取Response对象

node.js - 是否可以在 Node.js 中实现 SharePoint 2013 远程事件接收器?