繁体   English   中英

您如何限制 Javascript for 循环与 API 调用,每秒 4 个调用块?

[英]How do you throttle a Javascript for loop with an API call within, in chunks of 4 calls per second?

下面是一个 AWS Lambda function (node.js),它查询 DynamoDB,然后点击 API 以获取响应中的其他数据。 问题是特定的 API 每秒只允许 4 次调用,因此响应被分成 4 个块。for 循环如何等待从块接收每个响应,然后再移动到下一个块以不超过 API 的限制? 换句话说,你如何限制一个带有 API 调用的 for 循环,在进入下一个 4 个调用块之前等待 1 秒?

exports.handler = (event, context, callback) => {
  const params = {
    ...
  };
  documentClient.query(params, (err, data) => {
      if (err) {
          console.log(err);
          callback(err);
      } else {
          const items = [];
          const chunkSize = 4; // API allows 4 calls per second
          for (let i = 0; i < data.Items.length; i += chunkSize) {
              const chunk = data.Items.slice(i, i + chunkSize);
              const itemChunk = chunk.map(item => {
                  let obj = {
                      ...
                  };
                  axios.get('xxxxx')
                    .then(res => {
                        ...
                    }).catch(err => {
                        console.log(err)
                    });
                    return obj;
              });
              items.push(itemChunk);
          }
          const flattenedItems = items.flat();
          const response = {
              statusCode: 200,
              body: flattenedItems,
          };
          callback(null, response);
      }
  });
}

经过进一步研究,我发现了这个 node.js 库,它可以非常简单地限制 API 请求,我希望这可以帮助其他希望限制 API115C8885DD4A3689BE9 中的 API 调用

https://github.com/jhurliman/node-rate-limiter

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM