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

Хорошо, я добавил свой фактический код, который работает, чтобы открыть дверь, если все идеально. Я пытаюсь выполнить некоторую проверку ошибок на всякий случай, когда моя дверь застрянет. Поэтому он должен вернуться и остановить выполнение чего-либо за другим, если в функции bottomhall, но это не .. спасибо .. – fatboy

Смежные вопросы