Javascript 瓶颈似乎并没有实际限制请求的速率?

Javascript 瓶颈似乎并没有实际限制请求的速率?,javascript,node.js,typescript,rate-limiting,bottleneck,Javascript,Node.js,Typescript,Rate Limiting,Bottleneck,我正在编写一个程序,它需要迭代许多项,依次对每个项执行HTTPGET请求。第三方API将HTTP GET请求的速率限制为每分钟最多5个请求。我试图使用瓶颈来限制我对这个API的请求,但收效甚微 我的问题的一个最起码的例子如下: // index.ts import * as API from "./lib/API"; (async () => { try { //Gather all requests const list_of_requests

我正在编写一个程序,它需要迭代许多项,依次对每个项执行HTTPGET请求。第三方API将HTTP GET请求的速率限制为每分钟最多5个请求。我试图使用瓶颈来限制我对这个API的请求,但收效甚微

我的问题的一个最起码的例子如下:

// index.ts
import * as API from "./lib/API";

(async () => {
  try {
    //Gather all requests
    const list_of_requests = await API.Requests.get_list_of_all_requests(...);

    // Fire off each request at the appropriate rate
    list_of_requests.forEach(async (request) => {
      try {
        const request_result = await API.ResultGetter.get_result(...);

      } catch (error) {
        console.log(error.message);
      }
    });
  } catch (error) {
    console.log(error.name + ": " + error.message);
  }
})();
在我的
/lib/API
中:

// API.ts
import { AxiosRequestConfig } from "axios";
import { scheduleRequest } from "../util/Limiter";

export async function ResultGetter(...) {
     const requestURL: string = "https://www.website.ext/...";

  const requestConfig: AxiosRequestConfig = {
    url: requestURL,
    method: "GET",
    responseType: "json",
  };

return await scheduleRequest(requestConfig);
}
最后,在我的
util/Limiter

// Limiter.ts
import Bottleneck from "bottleneck";
import axios, { AxiosRequestConfig, AxiosResponse } from "axios";

/*
5 API requests per minute; 500 API requests per day
*/
export const limiter = new Bottleneck({
  reservoir: 500, 
  reservoirRefreshAmount: 500,
  reservoirRefreshInterval: 24 * 60 * 60 * 1000,
  maxConcurrent: 1,
  mintime: Math.ceil(1 / (5 / 60 / 1000)),
});

export async function scheduleRequest(
  request: AxiosRequestConfig
): Promise<AxiosResponse<any>> {
  return limiter.schedule(() => axios(request));
}
//Limiter.ts
从“瓶颈”导入瓶颈;
从“axios”导入axios,{AxiosRequestConfig,AxiosResponse};
/*
每分钟5次API请求;每天500个API请求
*/
导出常数限制器=新瓶颈({
水库:500,
储备量:500,
储层间距:24*60*60*1000,
马克斯:1,
mintime:Math.ceil(1/(5/60/1000)),
});
导出异步函数scheduleRequest(
请求:AxiosRequestConfig
):承诺{
返回限制器调度(()=>axios(请求));
}

然而,当我实际使用这个程序时,请求以尽可能快的速度发出。我真的不确定我在这件事上遗漏了什么。据我所知,
limiter.schedule(…)
应该返回一个承诺,该承诺在请求发生时解析,受设置的速率限制限制。但这并不是这里发生的事情。

事实证明,这只是一个很难找到的打字错误

在我的原始代码中,我定义了以下速率限制器:

export const limiter = new Bottleneck({
  reservoir: 500, 
  reservoirRefreshAmount: 500,
  reservoirRefreshInterval: 24 * 60 * 60 * 1000,
  maxConcurrent: 1,
  mintime: Math.ceil(1 / (5 / 60 / 1000)),
});
事实上,我写的是
mintime
,而不是
mintime
,用大写字母
T
创造了世界上所有的不同