我正在开发一个具有连续运行功能序列的物联网设备。设备还可以接收命令并执行它们。虽然我可以同时拥有这些"部分"我自己跑,我在试图同时运行这两件事时遇到了麻烦。这就是我要做的事情:
//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的新手,所以我不确定这是否是正确的方法。