> Как обрабатывать превышение лимита вызовов функции в JavaScript и что возвращать (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Яндекс

Стек: JavaScript

> Пример ответа

Для обработки превышения лимита вызовов функции в JavaScript можно использовать debouncing (устранение дребезга) или throttling (троттлинг). Выбор зависит от сценария:

  • Debouncing - откладывает вызов до тех пор, пока не пройдет заданный интервал после последнего вызова. Подходит для поиска на лету или обработки ввода.
  • Throttling - гарантирует, что функция будет вызываться не чаще одного раза за интервал. Подходит для скролла или ресайза.

Пример реализации debouncing с возвратом результата (через Promise):

JAVASCRIPT
function debounce(fn, delay) {
let timer;
let resolveList = [];
return function(...args) {
return new Promise((resolve) => {
resolveList.push(resolve);
clearTimeout(timer);
timer = setTimeout(() => {
const result = fn.apply(this, args);
resolveList.forEach(res => res(result));
resolveList = [];
}, delay);
});
};
}

Что возвращать:

  • Если лимит превышен - возвращать последний успешный результат (если он есть) или отклоненный Promise с ошибкой (например, new Error('Rate limit exceeded')).
  • В реальных приложениях (например, API-запросах) часто возвращают кэшированное значение или null с уведомлением пользователя.

Пример для API с лимитом:

JAVASCRIPT
const fetchWithLimit = (() => {
let lastCall = 0;
const LIMIT_MS = 1000;
let cachedResult = null;
return async (url) => {
const now = Date.now();
if (now - lastCall < LIMIT_MS) {
return cachedResult ?? Promise.reject(new Error('Too many requests'));
}
lastCall = now;
cachedResult = await fetch(url).then(res => res.json());
return cachedResult;
};
})();

Рекомендация: Всегда документируйте поведение при превышении лимита и предоставляйте fallback (например, последние данные или сообщение об ошибке).

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью