/**
* Throttles requests for text files to prevent overwhelming the server.
*
* @param {string} fileUrl The URL of the text file to request.
* @param {number} delayMs The delay in milliseconds between requests.
* @returns {Promise<string>} A promise that resolves with the file content.
* @throws {Error} If the file request fails.
*/
async function throttleTextFileRequest(fileUrl, delayMs) {
let lastRequestTime = 0;
return new Promise((resolve, reject) => {
const request = () => {
const now = Date.now();
const timeSinceLastRequest = now - lastRequestTime;
if (timeSinceLastRequest < delayMs) {
// Wait if the delay hasn't passed
setTimeout(request, delayMs - timeSinceLastRequest);
return;
}
lastRequestTime = now;
fetch(fileUrl)
.then(response => {
if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`);
}
return response.text(); // Get the file content as text
})
.then(data => {
resolve(data); // Resolve the promise with the file content
})
.catch(error => {
reject(error); // Reject the promise if there's an error
});
};
request(); // Start the first request
});
}
// Example usage:
// throttleTextFileRequest('https://example.com/data.txt', 1000) // Throttle requests to 1 second
Add your comment