停止事件的周期性函数调用

时间:2017-10-24 10:51:03

标签: node.js amazon-web-services iot

我正在开发一个具有连续运行功能序列的物联网设备。设备还可以接收命令并执行它们。虽然我可以同时拥有这些"部分"我自己跑,我在试图同时运行这两件事时遇到了麻烦。这就是我要做的事情:

//all required imports
var handler = new events.EventEmitter.call(this)
function step0(){
  //do something
  if(err) {setTimeout(step0, 1500); return; }
  step1(result);
}

function step1(){
  //do something
  if(err) {setTimeout(step0, 1500); return; }
  step2(result);
}

function step2(){
  //do something
  if(err) {setTimeout(step0, 1500); return; }
  console.log(result);
}

var timeOutID = setTimeout(step0, 1500);

//END of loop tasks
aws.device.on('message', function(payload, topic){
    clearTimeout(timeOutID);  
    handler.emit(payload.command);  
})

handler.on('command1', function(){
   /*do something*/
   setTimeout(step0, 1500);
});
handler.on('command2', function(){
   /*do something*/
   setTimeout(step0, 1500);
});
handler.on('command3', function(){
   /*do something*/
   setTimeout(step0, 1500);
});

我面临的问题是 - "步骤"之间似乎存在竞争条件。函数在"命令"时被调用事件处理程序正在执行。我是nodeJS的新手,所以我不确定这是否是正确的方法。

0 个答案:

没有答案