Javascript 对来自计时器的数据执行某些操作

Javascript 对来自计时器的数据执行某些操作,javascript,if-statement,setinterval,Javascript,If Statement,Setinterval,我有个问题。 我想做的是: 我有一个区间函数在运行。每5秒能量下降1。 当var能量小于等于66时,我想做一次。(当能量小于50时也是如此,但这是以后的情况)。但它不会显示if状态,只显示else。有人能帮我吗 var energy = 70; setInterval (function () { energy = energy - 1; $("#energiegetal").val(energy); }, 5000); if (energy < 67){

我有个问题。 我想做的是: 我有一个区间函数在运行。每5秒能量下降1。 当var能量小于等于66时,我想做一次。(当能量小于50时也是如此,但这是以后的情况)。但它不会显示if状态,只显示else。有人能帮我吗

var energy = 70;

setInterval    (function () {
    energy = energy - 1;
    $("#energiegetal").val(energy);
    }, 5000);

if (energy < 67){
    console.log("works")    
}

else    {
    console.log("not working")
}
var能量=70;
setInterval(函数(){
能量=能量-1;
$(“#energiegetal”).val(能源);
}, 5000);
如果(能量<67){
控制台日志(“工作”)
}
否则{
console.log(“不工作”)
}

您的
函数
需要包含您的
if
语句,如下所示:

var energy = 70;
setInterval (function () {
    energy = energy - 1;
    $("#energiegetal").val(energy);

    if (energy < 67){
        console.log("works")    
    }
    else {
        console.log("not working")
    }
}, 5000);
(function() {
    var energy = 70; // local to this IIFE

    setInterval(function() {
        energy = energy -1;
        events.emit('energyChanged', energy);
    }, 5000);
}());

events.on('energyChanged', function(energy) {
    if (energy < 67){
        console.log("works")    
    } else {
        console.log("not working")
    }
});
var能量=70;
setInterval(函数(){
能量=能量-1;
$(“#energiegetal”).val(能源);
如果(能量<67){
控制台日志(“工作”)
}
否则{
console.log(“不工作”)
}
}, 5000);

您可能只需要@sherb的答案。但如果您的代码更复杂,您可能希望将其分解为彼此不了解的不同部分。实现这一点的一种方法是通过某种类型的信号系统(如匿名PubSub/EventEmitter机制)连接部件。外面有很多。使用全局
events
模块,这可能会将代码转换为如下内容:

var energy = 70;
setInterval (function () {
    energy = energy - 1;
    $("#energiegetal").val(energy);

    if (energy < 67){
        console.log("works")    
    }
    else {
        console.log("not working")
    }
}, 5000);
(function() {
    var energy = 70; // local to this IIFE

    setInterval(function() {
        energy = energy -1;
        events.emit('energyChanged', energy);
    }, 5000);
}());

events.on('energyChanged', function(energy) {
    if (energy < 67){
        console.log("works")    
    } else {
        console.log("not working")
    }
});
(函数(){
var energy=70;//此生命的局部
setInterval(函数(){
能量=能量-1;
事件。发射('energyChanged',energy);
}, 5000);
}());
事件.on('energyChanged',函数(能量){
如果(能量<67){
控制台日志(“工作”)
}否则{
console.log(“不工作”)
}
});

正如我所说,对于您的案例来说,这可能有些过分,但在您的需求需要时提供它是一件好事。

这里有一种适合初学者的方法:

var energy = 70;
var period = 5000; //ms

var test67 = function() {
    energy = energy - 1;
    $("#energiegetal").val(energy);
    if (energy < 67) {
        console.log("67 works");
        setTimeout(test50, period);
    } else {
        setTimeout(test67, period);
    }
};

var test50 = function() {
    energy = energy - 1;
    $("#energiegetal").val(energy);
    if (energy < 50) {
        console.log("50 works");
        setTimeout(keepDropping, period);
    } else {
        setTimeout(test50, period);
    }
};

var keepDropping = function() {
    energy = energy - 1;
    $("#energiegetal").val(energy);
    setTimeout(keepDropping, period);
};

setTimeout(test67, period);
var能量=70;
var周期=5000//太太
var test67=函数(){
能量=能量-1;
$(“#energiegetal”).val(能源);
如果(能量<67){
控制台日志(“67工程”);
设置超时(测试50,周期);
}否则{
setTimeout(test67,period);
}
};
var test50=函数(){
能量=能量-1;
$(“#energiegetal”).val(能源);
如果(能量<50){
控制台日志(“50件作品”);
setTimeout(keepDropping,period);
}否则{
设置超时(测试50,周期);
}
};
var keepDropping=函数(){
能量=能量-1;
$(“#energiegetal”).val(能源);
setTimeout(keepDropping,period);
};
setTimeout(test67,period);
您可以在上看到它的作用。关于这一点有很多不喜欢的地方,主要是重复,但这应该是可以理解的

我不知道你是否希望能量在第二次脱粒后继续下降。如果没有,您可以删除该函数和引用该函数的
setTimeout
调用

注意
setTimeout
setInterval
之间的区别。使用
setTimeout
,我们手动触发下一次调用。使用
setInterval
,它们会不断发生,但更难知道何时取消或更改所使用的函数

另一种方法是为每个Threshold使用标志,报告它们是否已运行,并每次检查标志以查看Threshold是否已跳闸


还有很多其他的选择,几乎所有的代码都比这个短。但这是我所能想象到的最明显的情况。

在设置间隔之后,在它有时间下降之前,您正在检查能量。你必须在减量后检查能量。