gpt4 book ai didi

typescript - Typescript 中的速率限制函数调用

转载 作者:搜寻专家 更新时间:2023-10-30 21:24:40 26 4
gpt4 key购买 nike

更新:我现在知道 throttle 会减少过多的函数调用,所以它不是正确的工具。我仍然想要一种惯用的方式来处理队列中的所有项目,而不会太快或丢弃任何项目。


我正在编写一个节点应用程序,该应用程序会访问具有速率限制的 API。我可以比允许发送它们的速度更快地创建调用。我想消耗一个调用队列,但不要太快或放弃任何一个。我做了一个小的 typscript 测试来说明我的麻烦:

import * as _ from "lodash";

let start = new Date().getTime();

function doLog(s: string) {
let elapsed = new Date().getTime() - start;
console.log(`${s} ${elapsed}`);
}

let array = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];
let throttled = _.throttle(doLog, 100);
array.forEach(s => throttled(s));

我希望看到的输出大致如下:

a 2
b 101
c 203
d 302
e 405
f 502
g 603
h 706
i 804
j 902

但我看到的是:

a 2
j 101

我的一些奇怪观察:

  • 在 100 毫秒 throttle 时,数组的大小似乎无关紧要:我将打印数组中的第一项和最后一项,无论它有 2 个元素还是 20 个元素。
  • 在 1ms throttle 时,我打印数组前面的 3-6 个元素,以及最后一个元素

最佳答案

如果您不关心 doLog() 在调用下一个之前是否安全地“完成”,您可以只使用 setTimeout

let array = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];
array.forEach((s, i) => setTimeout(doLog, i*100, s));

Adam 很好地解释了为什么 throttle 在这种情况下不好。

关于typescript - Typescript 中的速率限制函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37573521/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com