如何处理异步?

时间:2018-07-01 21:39:48

标签: node.js express mariasql

我是一名使用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 + '%'
  });
});

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

处理此问题的最佳方法是什么? 您有任何疑问请问。

谢谢!

1 个答案:

答案 0 :(得分:0)

您应该这样构造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
      });
    });
  });
});