如何处理物联网应用程序中的同步模式?
问题描述:
我在做一个物联网项目。一个典型的例子是:如何处理物联网应用程序中的同步模式?
- 我需要控制设备移动到坐标(X,Y)
- 然后我需要获得当前坐标,以决定下一步做什么。
我使用MQTT与设备进行通信。所以,在我的代码,我表达Blockly
这样的操作:
//javascript
robot.move(x, y);
if(robot.x > 100) {
// do something...
}
显然,移动(..)方法是异步之一,它刚刚发布的命令,不等待完成。
由于消息传递模式,即使我作为async
函数移动(..)并应用await
。我仍然认为它不起作用,因为我只收到关于消息的回调信息经由消息传递给机器人,而不是机器人实际移动到指定位置。
那么我应该怎么做这种情况呢?
答
你试过使用回调和承诺吗?通常异步函数要么提供了一些回调:
robot.move(x, y, function(err, res) { // do something })
或返回一个承诺:
robot.move(x, y).then(function(res) { // do something }).catch(function(err) { // error })
答
需要明确的是,没有端到端MQTT传递通知,则回调是仅该消息已交付给经纪人,而不是交给机器人。要知道机器人已经采取行动的唯一方法是让它发布一个单独的消息,以确认它已完成一项行动
谢谢。我知道。我的意思是当消息传递给机器人时调用回调函数,但机器人在收到消息后仍然需要时间移动到特定位置。后来的完成是我不知道的。 – Chao