Sobes.tech
Назад к задачам
Junior — Senior
46

Установка тайм‑аута для асинхронных функций

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

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

Нужно реализовать функцию, принимающую два параметра — асинхронную функцию и максимальное время её работы в миллисекундах. Возвращаемое значение должно быть новой версией переданной функции, выполнение которой ограничено указанным тайм‑аутом.

  • Если оригинальная функция завершается быстрее установленного лимита, новая функция должна вернуть полученный результат.
  • Если же выполнение превышает лимит, новая функция должна отклонить промис с сообщением: "Превышен лимит времени исполнения".

Примеры использования:

const fn = async (n) => {
    await new Promise(res => setTimeout(res, 100));
    return n + n;
}

asyncLimit(fn, 50); // rejected; "Превышен лимит времени исполнения"
asyncLimit(fn, 150); // resolved; 25

const fn2 = async (a, b) => {
    await new Promise(res => setTimeout(res, 120));
    return a + b;
}

asyncLimit(fn2, 100)(1, 2); // rejected; "Превышен лимит времени исполнения"
asyncLimit(fn2, 150)(1, 2); // resolved; 3