Exercise 16: Fetch with Rate Limiting

Problem Statement

Function `createRateLimitedFetch(limit, window)` banao jo fetch requests ko rate limit kare. Example: const fetch = createRateLimitedFetch(10, 60000); → max 10 requests per minute

Sample Output:

const fetch = createRateLimitedFetch(10, 60000);
await fetch(url);
// Limits to 10 requests per minute

Solution

const createRateLimitedFetch = (limit, window) => {
  const requests = [];
  return async (url, options) => {
    const now = Date.now();
    requests.push(now);
    const recent = requests.filter(t => now - t < window);
    requests.length = 0;
    requests.push(...recent);
    if (requests.length > limit) {
      const delay = window - (now - requests[0]);
      await new Promise(resolve => setTimeout(resolve, delay));
    }
    return fetch(url, options);
  };
};

Explanation

Overall Goal:

  • Fetch requests ko rate limit karna.

Real world:

  • API limits: rate limiting.
  • Request throttling: limit requests.