2016-02-20 52 views
-3

我不确定我完全获取javascript。我有三个函数可以互相调用一个,两个和三个...但是如果两个条件成立,我不想让三个函数运行。由于某种原因,它保持运行功能三。我如何确保功能三不运行基于功能2的条件。对不起,如果这已经回答了某处,但我找不到它..我看了看。认为我的头即将爆炸..谢谢。回调函数中的Javascript函数控制

这是我如何配置我的代码基本的例子:

gpio = require("rpi-gpio"); 

gpio.setup(35, gpio.DIR_OUT, dooropen); //motor will raise the door 
//gpio.setup(37, DIR_OUT, CLOSEDOOR); //motor will lower the door 
gpio.setup(40, gpio.DIR_IN, TopHall); //Top Hall Effect Sensor 
gpio.setup(38, gpio.DIR_IN, BottomHall); // Bottom Halle Effect Sensor 


function dooropen(err, value){ 
    if (err) { 
    console.log('Some type of error'); 
    } else { 
    //first check door is closed on gpio 38 
    //use function doorClosedCallback which receives (err, value) arguments from DOORCLOSED gpio pin 
    gpio.read(38, BottomHall); 
    } 
} 

function BottomHall(err, value) { 
    if (err) { 
    console.log('Error checking BottomHall.'); 
    } else if (value === true) { 
    console.log('Door is not closed.'); 
    return; 
    } else { 
    gpio.write(35, true, TopHall); 
    console.log('Door will open now.'); 
    } 
} 

function TopHall(err, value) { 
    if (err) { 
    console.log('Door open failed to start.', err); 
    return; 
    } else { 
    function readInput() { 
    gpio.read(38, function(err, value) { 
     console.log('The value is ' + value); 
    }); 
    } 
    var doorinvteralopen = setInterval(function(){ 
     gpio.read(40, function(err, value) { 
     if (err) { 
      console.log('Door start failed.', err); 
      return; 
     } else if (value === true) { 
       console.log('Door not yet open, keep the motor running.'); 
     } else { 
      clearInterval(doorinvteralopen); 
      console.log('Door is finally open.'); 
      gpio.write(35, false, function(err) { 
      if (err) {console.log('Error stopping the door motor.', err); 
      } 
      }); 
     } 
     }); 
    }, 1000); 
    } 
} 

//CHANGE I WILL ADD TO ABOVE 
function TopHall(err, value) { 
    gpio.read(38, function(err, value){ 
     if(value !== false){ 
     console.log('No Hall Effect Sensors available, com stopped'); 
     return; 
     } 
    }); 
    var doorinvteralopen = setInterval(function(){... 
+1

您已从代码中删除所有相关部分。我们需要看看你如何设置'twoParam'。请显示您的*实际*代码和示例输入。 – JJJ

+0

Juhana我添加了我的实际程序.. – fatboy

+0

这样更好,但现在还不清楚哪部分代码无法正常工作。请描述你期望代码的输出和实际是什么。包括你从gpio获得的输入。 – JJJ

回答

-3

如果我正确理解你的问题,这可能与函数的两个简单的别的解决,使得它看起来是这样的:

function two(twoParam) { 
    if (twoParam === true) { 
    return; 
    } 

    else { 
    var threeParam = ...; 
    three(threeParam); 
    } 
} 
+0

好吧,我已经添加了我的实际代码,如果一切都很完美,我就可以打开这个门。我试图做一些错误检查,以防万一我的门卡住了。所以它应该返回并停止运行其他任何东西if在函数bottomhall但它不..谢谢.. – fatboy