2017-09-23 4 views
0

私はIoTプロジェクトをやっています。典型的なシナリオである:IoTアプリケーションの同期モードはどのように処理されますか?

  1. I座標(X、Y)
  2. に移動するデバイスを制御する必要がそれから電流が次に何をすべきかを決定する座標取得する必要があります。

私はMQTTを使用してデバイスと通信します。だから私のコードでは、私がBlocklyに、このような操作を表現:

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

もちろん、移動(..)メソッドは、それだけでコマンドを発行し、完了を待たない、非同期の一つです。

メッセージングパターンのため、私はasync関数としてmove(..)を行い、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で配信通知を終わらせるに終わりはありません、コールバックはメッセージのみですブローカーに渡されました。ロボットの前方ではありません。それがロボットによって実行されたことを知る唯一の方法は、アクションを完了したことを確認するために別のメッセージを公開させることです。

関連する問題