2016-02-20 54 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