Как бороться с асинхронностью? - PullRequest
0 голосов
/ 02 июля 2018

Я парень на C / C ++, пытаюсь создать простое веб-приложение, используя Node.js, Express.js и MariaDB.

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 голосов
/ 02 июля 2018

Вы должны структурировать свой 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
      });
    });
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...