[英]How to throttle a for in Javascript loop that has an async await api call inside?
[英]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 调用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.