Javascript 在JS中,我可以在不放弃函数调用的情况下限制函数吗?

Javascript 在JS中,我可以在不放弃函数调用的情况下限制函数吗?,javascript,timing,throttling,debounce,Javascript,Timing,Throttling,Debounce,我需要一个函数在一个函数调用和另一个函数调用之间有一定的时间,这与油门的作用非常相似,但我需要所有的函数调用都有人参与 让我解释一下: 让我们想象一下,在函数foo上有一个10秒的节流阀,以及一个调用foobar的事件。 事件被触发3次,每5秒触发一次。只有第一个和最后一个将参加,而中间的一个将被忽略。 正常油门: [event]--5s--[event]--5s--[event] [foo]---------10s---------[foo] 我需要的是始终收听事件,但在前一个事件之后10秒

我需要一个函数在一个函数调用和另一个函数调用之间有一定的时间,这与油门的作用非常相似,但我需要所有的函数调用都有人参与

让我解释一下:

让我们想象一下,在函数
foo
上有一个10秒的节流阀,以及一个调用foobar的事件。 事件被触发3次,每5秒触发一次。只有第一个和最后一个将参加,而中间的一个将被忽略。 正常油门:

[event]--5s--[event]--5s--[event]
[foo]---------10s---------[foo]
我需要的是始终收听事件,但在前一个事件之后10秒

[event]--5s--[event]--5s--[event]
[foo]----------10s--------[foo]---------10s--------[foo]

有什么想法吗?我考虑过油门和去抖器,但没有一个能满足我的需要。

这很简单。只需创建一个函数对象数组,每10秒提取一个最旧的函数对象并执行它

const队列=[]
功能速率限制(fn){
队列推送(fn)
}
设置间隔(()=>{
const nextFn=queue.shift()//删除第一个函数并返回它。
if(nextFn)nextFn()//执行第一个函数(如果存在)。
},1000)//以毫秒为单位的间隔。设置为1s进行测试。
rateLimit(()=>console.log('A'))
速率限制(()=>console.log('B'))

rateLimit(()=>console.log('C'))
如果有人感兴趣,我使用了的答案并添加了一些逻辑,以便更好地控制他提到的时间间隔

const队列=[]
变量间执行
功能速率限制(fn){
队列推送(fn)
if(queue.length&&!intervalExecution){
intervalExecution=setInterval(()=>{
const nextFn=queue.shift()
if(nextFn){
nextFn()
}否则{
清除间隔(执行间隔)
intervalExecution=未定义
}
}, 1000)
}
}
速率限制(()=>console.log('test'))
速率限制(()=>console.log('test'))
速率限制(()=>console.log('test'))

rateLimit(()=>console.log('test'))
我的第一个想法是将事件推送到某种类型的事件队列中,然后在每个持续时间处理第一个事件。这不是lodash节流功能吗?谢谢!这确实完成了我想要做的工作。