Javascript 对来自计时器的数据执行某些操作
我有个问题。 我想做的是: 我有一个区间函数在运行。每5秒能量下降1。 当var能量小于等于66时,我想做一次。(当能量小于50时也是如此,但这是以后的情况)。但它不会显示if状态,只显示else。有人能帮我吗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){
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是否已跳闸
还有很多其他的选择,几乎所有的代码都比这个短。但这是我所能想象到的最明显的情况。在设置间隔之后,在它有时间下降之前,您正在检查能量。你必须在减量后检查能量。