0

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

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

处理这个问题的最佳方法是什么?您有任何问题请提出。

谢谢!

4

1 回答 1

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
      });
    });
  });
});
于 2018-07-01T21:57:21.833 回答