最简单的不可撤销的timout / cooldown功能?

时间:2017-09-23 22:20:05

标签: javascript

我试图在我的发送消息系统中添加1秒的冷却时间(例如,你最多可以每秒发送1条消息)。所以我最初的想法只是创建一个超时,然后尝试发送以检查它是否仍然存在。事实证明,这比最初的预期更多。

我有什么东西在这里失踪吗?不是有一些简单的东西:

//inside some message sending function
if(!mySuperCooldown)
{
    //send message
    mySuperCooldown = cooldown(1000);
}

我成功构建的其他所有内容最终会占用大量的线条,而且在我看来,这是我之前想到过的东西。谢谢你,原谅我的文盲。

2 个答案:

答案 0 :(得分:2)

有一个允许消息的标志,并在发送消息时将其设置为false。然后设置超时1000毫秒,将标志重置为true。

http://www.example.com

答案 1 :(得分:2)

创建一个更高阶函数,将正常函数转换为速率限制函数:

function rate_limit(delay, func) {
    var last_call = null;

    return function() {
        if (last_call && (Date.now() - last_call <= delay)) {
            return;
        }

        last_call = Date.now();

        return func();
    };
}

然后您可以对任何功能进行速率限制:

var my_function = rate_limit(1000, function() {
    console.log('foo');
});

运行my_function()只会每秒调用一次原始函数。