Как обрабатывается режим синхронизации в приложении IoT?
Я делаю проект IoT. Типичный сценарий:
- Мне нужно контролировать устройство, чтобы перейти к координате (х, у)
- Затем мне нужно получить текущую координату, чтобы решить, что делать дальше.
Я использую MQTT для связи с устройствами. Так что в моем коде я выражаю операции следующим образом: Blockly
:
//javascript
robot.move(x, y);
if(robot.x > 100) {
// do something...
}
Очевидно, что метод move(..) является асинхронным, он просто публикует команду и не ожидает завершения.
Из-за схемы обмена сообщениями, даже я делаю ход (..) как async
функционировать и применять await
, Я все еще не думаю, что это работает, потому что я получаю обратный вызов только о том, что сообщение доставлено роботу брокером сообщений, а не робот действительно перемещается в указанное место.
Так как же мне поступить по такому сценарию?
2 ответа
Чтобы было ясно, в MQTT нет уведомления о сквозной доставке, обратный вызов - это только то, что сообщение доставлено посреднику, а не роботу. Единственный способ узнать, что робот действовал, - это опубликовать отдельное сообщение, подтверждающее, что он выполнил действие.
Вы пытались использовать обратные вызовы и обещания? Обычно асинхронная функция либо обеспечивает некоторый обратный вызов:
robot.move(x, y, function(err, res) { // do something })
или возвращает обещание:
robot.move(x, y).then(function(res) { // do something }).catch(function(err) { // error })