我想知道如何简洁地计算已发送请求的数量。有一个API,可让您在一分钟内最多向该API的任何端点发送50个请求。每发送60秒,在发送第一个请求后,它们会将我发送的请求数量再次重置为零。我需要做很多请求,我想知道如何正确跟踪它们。
async dataCollector(){
let urlList = this.urlList; // 100+ urls
for(let url in urlList){
await this.getResource(url).then( data =>
// do something with data
)
}
现在,我必须以某种方式签入getResource()
我发送了多少个请求,依此类推,这样我就等到有更多请求可用为止。什么是检查它们的最佳方法?
getResource(url){
return this.http.get(url);
}
我非常感谢。
您可以保留已发送请求的数量以及第一个请求的时间。您还需要一种方法来等待之前的请求,这可以通过Promise链来完成:
chain = Promise.resolve();
count = 0;
first = undefined;
aquireSlot() {
return this.chain = this.chain.then(async () => {
if(this.count >= 20) {
await timer(60_000 - (Date.now() - this.first));
this.count = 0;
this.first = undefined;
}
if(!this.first) this.first = Date.now();
this.count += 1;
});
}
async getResource(url){
await this.aquireSlot();
return await this.http.get(url);
}
// the implementation of timer is left to the reader