0

我正在做一个物联网项目。一个典型的场景是:

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

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

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

显然,move(..) 方法是一个异步方法,它只是发布命令而不等待完成。

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

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

4

2 回答 2

0

需要明确的是,MQTT 中没有端到端的传递通知,回调只是消息已经传递到代理,而不是转发到机器人。知道它已被机器人操作的唯一方法是让它发布单独的消息以确认它已完成操作

于 2017-09-24T08:10:32.177 回答
0

您是否尝试过使用回调和承诺?通常异步函数要么提供一些回调:

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

或返回一个承诺:

robot.move(x, y).then(function(res) { // do something }).catch(function(err) { // error })
于 2017-09-23T23:31:01.263 回答