Назад к задачам
Junior — Senior
5

Ограничитель времени выполнения для асинхронных функций

Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

Необходимо реализовать функцию‑обёртку, принимающую два параметра – асинхронную функцию и лимит времени в миллисекундах. Возвращаемая функция должна выполнять исходную асинхронную задачу, но не дольше указанного ограничения. Требования: • Если работа исходной функции завершается быстрее лимита, обёртка должна вернуть полученный результат. • Если выполнение превышает заданный предел, обёртка должна отклонить промис с сообщением «Превышен лимит времени исполнения».

const originalFn = async (n) => {
  await new Promise(res => setTimeout(res, 100));
  return n * n;
}
withTimeout(originalFn, 50)(5); // rejected: Превышен лимит времени исполнения
withTimeout(originalFn, 150)(5); // resolved: 25

const sumFn = async (a, b) => {
  await new Promise(res => setTimeout(res, 120));
  return a + b;
}
withTimeout(sumFn, 100)(1, 2); // rejected: Превышен лимит времени исполнения
withTimeout(sumFn, 150)(1, 2); // resolved: 3