我目前正在尝试编写类似于电子宠物“护理错误”的代码。
在本例中,我尝试创建一个函数来检查对象的饥饿统计数据是否高于或等于 10。一旦发生这种情况,计时器将启动,如果 10 秒后仍保持在 10 以上,它将被记录为“错误”。
但是,如果用户执行其他操作将饥饿值降低到 10 以下,则会清除计时器。
尽管尝试了下面的代码,但我目前无法正确清除计时器。
var changeHungerMood = setInterval(mistakeCheck, 5000);
function mistakeCheck() {
var mistakeTimer
function addMistake() {
stats.mistakes += 1;
}
if (stats.hunger >= 10) {
var mistakeTimer = setTimeout(addMistake, 10000);
} else {
clearTimeout(mistakeTimer);
console.log("Mistake Cleared!");
}
}
minmaxHunger("hunger", 10, 0);
目前,即使检查后饥饿值低于 10,计时器也不会被清除,并且仍然会被记录为错误。有人可以帮忙吗?谢谢。
最佳答案
您应该明确每种情况下您需要完成的任务。 非常重要的是,您需要:
- 要在
stats.hunger >= 10
时设置计时器,您做得很好(除了您使用var
声明mistakeTimer
两次...跳过第二个var
)。 - 当 10 秒结束时,您需要检查
stats.hunger
是否仍为10
或更大,而不是调用addMistake
,如果是这种情况,请调用您的addMistake
函数。
因此,您需要添加一个函数 addMistakeIfNeeded
来执行检查并在需要时调用 addMistake
。并且您的计时器应该调用此 addMistakeIfNeeded
函数,而不是 addMistake
。
@Jonas 是对的,您需要将 addMistake
和 addMistakeIfNeeded
放在 mistakeCheck
函数之外。
关于javascript - 单击按钮后清除超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57429707/