【问题标题】:How to deal with asynchrony?如何处理异步?
【发布时间】:2018-12-10 03:39:13
【问题描述】:

我是一名 C/C++ 人,正在尝试使用 Node.js、Express.js 和 MariaDB 制作一个简单的 Web 应用程序。

function getData(sensor)
{
  var query = c.query('SELECT * FROM sensor_data WHERE id >= ALL (SELECT id FROM sensor_data WHERE sensor = ?) AND sensor = ?', [sensor,sensor]);
  query.on('result', function(res) {
    res.on('data',function(row) {
      return(row);
    });
  });
}

app.get('/', function(req, res) {
  res.render('index', {
    temperatureSala: getData('sala').temperature + 'ºC',
    humiditySala: getData('sala').humidity + '%'
  });
});

我的问题是处理异步。当我尝试渲染页面时,渲染函数首先完成运行,然后我发现变量未定义。查询结束,结果正确。

处理此问题的最佳方法是什么? 有什么问题欢迎提问。

谢谢!

【问题讨论】:

标签: node.js express mariasql


【解决方案1】:

您应该像这样构建您的app.get。我省略了您的函数getData,但如果您需要它以供以后使用,那么您可以将其设置为接受回调并在该回调内执行res.render

app.get('/', function(req, res) {
  const query = c.query('SELECT * FROM sensor_data WHERE id >= ALL (SELECT id FROM sensor_data WHERE sensor = ?) AND sensor = ?', ['sala', 'sala']);

  query.on('result', function(queryRes) {
    queryRes.on('data',function(row) {
      const temperatureSala = row.temperature + 'ºC',
            humiditySala = row.humidity + '%';

      res.render('index', {
        temperatureSala,
        humiditySala
      });
    });
  });
});

【讨论】:

  • 在你的函数中小心阴影resres 是指向函数参数还是 express 的响应对象?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-29
  • 2017-06-10
  • 2017-11-20
  • 2019-11-14
  • 2019-05-25
  • 2018-10-03
相关资源
最近更新 更多