Sobes.tech
Назад к вопросам
Middle
5

function createRateLimiter(limit, interval) {} // Тесты const limiter = createRateLimiter(2, 100); let count = 0; const fn = () => { count++ console.log(count) }; limiter(fn); // count = 1 limiter(fn); // count = 2 limiter(fn); // Игнор (лимит 2/100ms) setTimeout(() => limiter(fn), 150); // count = 3 (прошло >100ms)

Компании, где спрашивали
IGaming

Ответ от нейросети

sobes.tech AI

Функция createRateLimiter должна возвращать функцию-ограничитель вызовов, которая позволяет вызвать переданную функцию не более limit раз за интервал interval в миллисекундах. Если лимит превышен, вызов игнорируется.

Пример реализации на JavaScript:

function createRateLimiter(limit, interval) {
  let calls = 0;
  let queue = [];

  setInterval(() => {
    calls = 0;
    while (calls < limit && queue.length > 0) {
      const fn = queue.shift();
      fn();
      calls++;
    }
  }, interval);

  return function(fn) {
    if (calls < limit) {
      calls++;
      fn();
    } else {
      // Игнорируем вызов, не добавляем в очередь
    }
  };
}

// Тесты
const limiter = createRateLimiter(2, 100);
let count = 0;

const fn = () => {
  count++;
  console.log(count);
};

limiter(fn); // count = 1
limiter(fn); // count = 2
limiter(fn); // Игнор (лимит 2/100ms)
setTimeout(() => limiter(fn), 150); // count = 3 (прошло >100ms)

В этой реализации вызовы, превышающие лимит, просто игнорируются, как указано в условии.