如何执行脚本一次直到 if 变为假?(节点.JS)

How can I execute script once until if becomes false? (Node.JS)

本文关键字:if JS 节点 一次 执行 何执行 脚本      更新时间:2023-09-26

我对编码很陌生,不知道如何表达这个问题。我正在整合最近添加的 CS:GO 游戏状态集成功能,以根据游戏中发生的情况更改色相灯光。我目前正在处理的部分是一个简单的脚本,如果我在"CT"团队中,它会将第一盏灯更改为蓝色。除了它一遍又一遍地告诉我我在 CT 方面之外,它工作正常。有没有办法将我的脚本更改为仅在第一个 If 语句变为 false 时才更新?

法典:

setInterval(checkTeam, 250);
function checkTeam() {
  fs.readFile('player_team', 'utf8', function(err, teamStatus) {
    if (err) throw err;
    if(teamStatus === 'CT') {
      console.log('CT Side');
      if (currentStatus !== 'CT') {
        changeLight(1, noLights());
        currentStatus = 'CT';
      }
      if (currentStatus === 'CT') {
        changeLight(1, blueLights());
        currentStatus = 'CT';
      }
    }
    if (teamStatus === 'T'){
      console.log('T Side');
      if (currentStatus !== 'T Side') {
        changeLight(3, noLights());
      }
      if (currentStatus === 'T Side') {
        changeLight(3, orangeLights());
        currentStatus = 'T';
      }
      if (currentStatus === null) {
        changeLight(1, noLights());
      }
    }
  });
}
function changeLight(light, lightType) {
  var jsonString = JSON.stringify(lightType);
  http.request({
    host: HUE_BRIDGE_IP,
    path: HUE_PATH + 'lights/' + light + '/state',
    method: 'PUT',
    headers: {
      'Content-Type': 'application/json',
      'Content-Length': jsonString.length
    }
  }, function() {
  }).write(jsonString);
}
function redLights() {
  return {
    'on': true,
    'sat': 254,
    'bri': 254,
    'hue': 0,
    'transitiontime': 0
  }
}
function blueLights() {
  return {
    'on': true,
    'sat': 254,
    'bri': 254,
    'hue': 45000,
    'transitiontime': 0
  }
}
function explodeLights() {
  return {
    'on': true,
    'sat': 254,
    'bri': 254,
    'hue': 10000,
    'transitiontime': 0
  }
}
function whiteLights() {
  return {
    'on': true,
    'sat': 0,
    'bri': 254,
    'hue': 10000
  }
}
function noLights() {
  return {
    'on': false,
    'transitiontime': 0
  }
}
function orangeLights() {
  return {
    'on': false,
    'transitiontime': 0
  }
}

我猜你真正需要的唯一部分是顶部,但以防万一你需要 changeLight 功能,我包含了更多。基本上,我想让if(teamStatus === 'CT') {只执行一次,直到它发生变化或变为 null。如果这是不可能的,是否有妥协?

提前感谢任何试图提供帮助的人,
欣赏它!

编辑:
所以我认为我没有提供足够的信息,所以这里是服务器从游戏状态获取信息的代码:

var bodyParser = require('body-parser');
var express = require('express');
var fs = require('fs');
var app = express();
app.use(bodyParser.json()); // for parsing application/json
app.post('/', function(req, res) {
  fs.readFile('player_team', 'utf8', function(err, teamStatus) {
    var player = 'player' in req.body ? req.body.player : null;
    if (player && player.team !== teamStatus) {
      var newTeamStatus = req.body.player.team;
      if (!newTeamStatus) {
        newTeamStatus = '';
      }
      fs.writeFile('player_team', newTeamStatus);
      console.log(newTeamStatus);
    }
  });
});
var PORT = 8080;
var HOST = '127.0.0.1';
app.listen(PORT, HOST);
console.log('Server is running on ' + HOST + ':' + PORT);

根据我对逻辑的猜测,你可能想做:

var currentStatus = '';
function checkTeam() {
    fs.readFile('player_team', 'utf8', function (err, teamStatus) {
        if (err) throw err;
        if (teamStatus !== currentStatus) { // only change lights if status has changed
            if (teamStatus === 'CT') {
                console.log('CT Side');
                changeLight(3, noLights()); // turn off 3?
                changeLight(1, blueLights());
            }
            else if (teamStatus === 'T') {
                console.log('T Side');
                changeLight(1, noLights()); // turn off 1?
                changeLight(3, orangeLights());
            }
            else {
                changeLight(1, noLights());
                changeLight(3, noLights()); // 1 and 3?
            }
            currentStatus = teamStatus; // update the current status
        }
    });
}

我唯一无法弄清楚的是 changeLight 中的13是做什么的,所以这段代码可能不完整,但我相信它会在不闪烁灯光或控制台的情况下完成您的原始代码所做的事情.log您每 250 毫秒在哪个团队

我在行中添加了一些注释,我认为如果有两个不同的灯,其中一个变成蓝色或另一个变成橙色,则

可能需要