计数发送多少个请求的简洁方法是什么?

问题描述 投票:0回答:1

我想知道如何简洁地计算已发送请求的数量。有一个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);
}

我非常感谢。

javascript typescript http request counter
1个回答
0
投票

您可以保留已发送请求的数量以及第一个请求的时间。您还需要一种方法来等待之前的请求,这可以通过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
© www.soinside.com 2019 - 2024. All rights reserved.