javascript - 单击按钮后清除超时

标签 javascript function timeout

我目前正在尝试编写类似于电子宠物“护理错误”的代码。

在本例中,我尝试创建一个函数来检查对象的饥饿统计数据是否高于或等于 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,计时器也不会被清除,并且仍然会被记录为错误。有人可以帮忙吗?谢谢。

最佳答案

您应该明确每种情况下您需要完成的任务。 非常重要的是,您需要:

  1. 要在 stats.hunger >= 10 时设置计时器,您做得很好(除了您使用 var 声明 mistakeTimer两次...跳过第二个 var)。
  2. 当 10 秒结束时,您需要检查 stats.hunger 是否仍为 10 或更大,而不是调用 addMistake,如果是这种情况,请调用您的 addMistake 函数。

因此,您需要添加一个函数 addMistakeIfNeeded 来执行检查并在需要时调用 addMistake。并且您的计时器应该调用此 addMistakeIfNeeded 函数,而不是 addMistake

@Jonas 是对的,您需要将 addMistakeaddMistakeIfNeeded 放在 mistakeCheck 函数之外。

关于javascript - 单击按钮后清除超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57429707/

相关文章:

javascript - 如何使用 gulp 正确清理项目?

Java: ExecutorService with Callables: Timeout: future.get() 导致直接中断程序

python - OperationTimedOut : errors={}, last_host=127.0.0.1

javascript - jquery 从 HTML 表单发布数组数据

javascript - 使用 javascript 进行实时验证 - onchange 只触发一次

Javascript - 数据插值 - D3 动画散点图

python - 检查函数是否在 Python 中返回 false

function - 无法使用范围使用变量

python - 类中的所有函数是否有 __enter__ 和 __exit__ 等价物?

C# MVC 使用 jquery 创建基于计时器的自动注销?