回调中的 JavaScript 函数控制

Javascript function control in callbacks

本文关键字:函数 控制 JavaScript 回调      更新时间:2023-09-26

我不确定我是否完全掌握了javascript。我有三个函数,它们互相调用,所以一,二和三。 但如果两个条件为真,我不希望三个运行。 由于某种原因,它一直运行功能三。如何确保函数 3 不会根据函数 2 中的条件运行。 抱歉,如果这已经在某处回答了,但我找不到它。我看了又看。以为我的头快要爆炸了。谢谢。

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

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(){...

如果我正确理解了您的问题,这可以通过函数二中的简单 else 来解决,使其看起来像这样:

function two(twoParam) {
  if (twoParam === true) {
    return;
  }
  else {
    var threeParam = ...;
    three(threeParam);
  }
}