2017-09-23 48 views
0

我在做一个物联网项目。一个典型的例子是:如何处理物联网应用程序中的同步模式?

  1. 我需要控制设备移动到坐标(X,Y)
  2. 然后我需要获得当前坐标,以决定下一步做什么。

我使用MQTT与设备进行通信。所以,在我的代码,我表达Blockly这样的操作:

//javascript 
robot.move(x, y); 
if(robot.x > 100) { 
// do something... 
} 

显然,移动(..)方法是异步之一,它刚刚发布的命令,不等待完成。

由于消息传递模式,即使我作为async函数移动(..)并应用await。我仍然认为它不起作用,因为我只收到关于消息的回调信息经由消息传递给机器人,而不是机器人实际移动到指定位置。

那么我应该怎么做这种情况呢?

回答

0

你试过使用回调和承诺吗?通常异步函数要么提供了一些回调:

robot.move(x, y, function(err, res) { // do something }) 

或返回一个承诺:

robot.move(x, y).then(function(res) { // do something }).catch(function(err) { // error }) 
+0

谢谢。我知道。我的意思是当消息传递给机器人时调用回调函数,但机器人在收到消息后仍然需要时间移动到特定位置。后来的完成是我不知道的。 – Chao

0

需要明确的是,没有端到端MQTT传递通知,则回调是仅该消息已交付给经纪人,而不是交给机器人。要知道机器人已经采取行动的唯一方法是让它发布一个单独的消息,以确认它已完成一项行动

相关问题