/**
* Cleans and processes runtime environment data with rate limiting.
*
* @param {Array<Object>} data - Array of data objects to process.
* @param {number} maxRequestsPerSecond - Maximum number of requests allowed per second.
* @returns {Promise<Array<Object>>} - A promise that resolves to the cleaned and processed data.
*/
async function processDataWithRateLimit(data, maxRequestsPerSecond) {
const results = [];
let requestQueue = [];
let running = 0; // Number of currently running requests
let lastExecutionTime = 0;
async function processItem(item) {
// Simulate data cleaning and processing
await new Promise(resolve => setTimeout(resolve, Math.random() * 500)); // Simulate work
const cleanedItem = {
...item,
cleanedData: item.data.toUpperCase(), // Example cleaning
};
results.push(cleanedItem);
}
async function createRequest() {
if (requestQueue.length > 0 && running >= maxRequestsPerSecond) {
return; // Rate limit reached
}
if (requestQueue.length < maxRequestsPerSecond) {
const item = requestQueue.shift();
running++;
try {
await processItem(item);
} catch (error) {
console.error("Error processing item:", error);
} finally {
running--;
// Schedule the next request if there are more in the queue
if (requestQueue.length > 0) {
createRequest();
}
}
}
}
for (const item of data) {
requestQueue.push(item);
createRequest();
}
// Wait for all requests to complete
while (running > 0) {
await new Promise(resolve => setTimeout(resolve, 10)); // Check periodically
}
return results;
}
export default processDataWithRateLimit;
Add your comment