1. /**
  2. * Throttles requests for text files to prevent overwhelming the server.
  3. *
  4. * @param {string} fileUrl The URL of the text file to request.
  5. * @param {number} delayMs The delay in milliseconds between requests.
  6. * @returns {Promise<string>} A promise that resolves with the file content.
  7. * @throws {Error} If the file request fails.
  8. */
  9. async function throttleTextFileRequest(fileUrl, delayMs) {
  10. let lastRequestTime = 0;
  11. return new Promise((resolve, reject) => {
  12. const request = () => {
  13. const now = Date.now();
  14. const timeSinceLastRequest = now - lastRequestTime;
  15. if (timeSinceLastRequest < delayMs) {
  16. // Wait if the delay hasn't passed
  17. setTimeout(request, delayMs - timeSinceLastRequest);
  18. return;
  19. }
  20. lastRequestTime = now;
  21. fetch(fileUrl)
  22. .then(response => {
  23. if (!response.ok) {
  24. throw new Error(`HTTP error! Status: ${response.status}`);
  25. }
  26. return response.text(); // Get the file content as text
  27. })
  28. .then(data => {
  29. resolve(data); // Resolve the promise with the file content
  30. })
  31. .catch(error => {
  32. reject(error); // Reject the promise if there's an error
  33. });
  34. };
  35. request(); // Start the first request
  36. });
  37. }
  38. // Example usage:
  39. // throttleTextFileRequest('https://example.com/data.txt', 1000) // Throttle requests to 1 second

Add your comment