gpt4 book ai didi

javascript - 将请求流批处理为 Promise,并按时间间隔分组

转载 作者:行者123 更新时间:2023-12-03 02:13:35 26 4
gpt4 key购买 nike

我有一个 API 端点,它从各种来源接收大量请求。

对于收到的每个请求,我都会创建一个调用内部 API 的 Promise。

我想按源对这些 Promise 进行批处理,其中每个批处理最多包含 10 秒的请求。

如何做到这一点?

最佳答案

如果您有来自多个源的多个请求,您可以继续将它们放入 Map 对象中,其中键是源,值是接收到的请求,收集在一个数组中。例如让 myMap 类似于;

{source1: [req1,req2,req3],
source2: [req1,req2],
.
.
sourceN: [req1,req2,...,reqm]}

您可以设置伪递归 setTimeout 循环来调用您的内部 API。

var apiInterval = 10000;

function runner(){
setTimeout(mv => { Promise.all(mv.map(reqs => Promise.all(reqs.map(req => apiCall(req)))))
.then(pss => pss.map(ps => ps.map(p => p.then(r => doSomethingWithEachApiCallResult(r)))));
clearMapValues(); // to be filled in the next 10 seconds
runner();
}, apiInterval, myMap.values.slice());
}

请将以上内容作为伪代码,仅供您引用。例如,Map.values 返回一个迭代器对象,在使用 之前,您可能需要将其转换为 [...myMap.values()] 之类的数组。 map().slice() 覆盖它。

这比 setInterval 循环方式要好一点,因为您可以根据工作负载或其他情况动态更改间隔值。

关于javascript - 将请求流批处理为 Promise,并按时间间隔分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49449900/

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