限制javascript函数的速率

问题描述 投票:5回答:7

如何限制一个函数每秒只能运行10次,但是在有新的“ spot”可用时继续执行?这意味着我们将尽快调用该函数10次,并且自从任何函数调用以来经过1秒后,我们可以进行另一次调用。

此描述可能令人困惑-但答案是在给定速率限制的情况下完成X个API调用的最快方法。

示例:这是一个循环遍历字母以打印每个字母的示例。我们如何将其限制为每秒仅printLetter 10次?我仍然想以适当的速度遍历所有字母。

function printLetter(letter){
  console.log(letter);
}

var alphabet = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "X", "Y", "Z"];

// How can I limit this to only run 10 times per second, still loop through every letter, and complete as fast as possible (i.e. not add a hard spacing of 100ms)?
alphabet.forEach(function(letter){
  printLetter(letter);
});

一个好的解决方案不会将每个呼叫强制间隔100毫秒。这使得10次调用的最短运行时间为1秒-实际上,您可以同时(几乎)同时执行这些操作,并且有可能在一秒钟之内完成。]

如何限制一个函数每秒只能运行10次,但是在有新的“ spot”可用时继续执行?这意味着我们将尽快调用该函数10次,并在1秒时调用该函数...

javascript rate-limiting
7个回答
10
投票

这里大多数其他建议的解决方案使用带超时的间隔或递归函数将函数调用平均隔开。


1
投票

递归


1
投票

您必须做一些不同的事情:


0
投票

您可以将setTimeout的值设为100(1000毫秒/ 10),以将输出限制为每秒10次。使用变量call对通话进行计数。如果要在其他地方调用相同的功能,请记住将计数器call重置为1,以便重新开始:


0
投票

这是带有回调的递归版本(这是您的意思是“有新点时继续执行”?)


0
投票

这是我当时所能想到的最好的。


0
投票

这些都不是真正有用的。我不是一个很好的开发人员,我正在整理一个测试并编写了自己的少量函数。我不明白所接受的答案在做什么,所以也许这会对其他人有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.