【问题标题】:How to stop a function from being called before a certain time如何在特定时间之前停止调用函数
【发布时间】:2020-04-17 23:03:56
【问题描述】:

我正在构建一个允许用户提供输入的网站,并且我想阻止某个功能在特定时间之前运行。在这种情况下,我希望该时间为 2 秒。我一直在尝试使用 setTimeout 函数来控制延迟,但我一直遇到问题。通过使用'console.log()',我已经能够弄清楚问题是toggleCanRun() 从未被调用过。谁能解释为什么?非常感谢。这是我目前得到的代码

function toggleCanRun () {
    canRun = true;
    clearTimeout(timer);
};
let timer;
let canRun = true;
function playSound () {
    if (canRun === true) {
        displayInfo();
        canRun = false;
        timer = setTimeout(toggleCanRun, 2000);
    } else {
        clearTimeout(timer);
    };
};

【问题讨论】:

  • 看起来你想要一个debounced 函数。很多 js helper 库都有 debounce 函数 helper(比如下划线/lodash等)
  • 这能回答你的问题吗? What does _.debounce do?
  • 我已经为这个项目安装了几个其他的库,我正在努力减小大小。 Genhis 给了我一个无需额外库即可工作的答案,因此感谢您的帮助,但我想我会坚持他们的建议

标签: javascript


【解决方案1】:

当函数无法运行 (canRun = false) 并且您调用 playSound() 时,它会执行 else 条件并清除超时,这就是它没有被执行的原因。

如果您删除 else 条件,它应该可以正常工作。超时只有一次,所以你不需要在任何地方清除它。

function playSound () {
    if (canRun === true) {
        displayInfo();
        canRun = false;
        timer = setTimeout(toggleCanRun, 2000);
    }
};

【讨论】:

    猜你喜欢
    • 2019-06-28
    • 1970-01-01
    • 2013-11-05
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多