Назад к вопросам
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)
В этой реализации вызовы, превышающие лимит, просто игнорируются, как указано в условии.