Задача

Дана асинхронная функция fn и время t в миллисекундах, нужно вернуть новую версию этой функции, выполнение которой ограничено заданным временем. Функция fn принимает аргументы, переданные в эту новую функцию.

Возвращаемая функция работает по следующим правилам:

  • если fn выполнится за заданное время t, то функция резолвит полученные данные;
  • если fn не выполнится за заданное время t, то функция реджектит строку "Time limit exceeded".

Пример

const asyncF = (x) =>
    new Promise((resolve) => setTimeout(() => resolve(x * 2), 1000));
 
const limitedFunc = timeLimited(asyncF, 500);
 
limitedFunc(5)
    .then(console.log) // Не успеет, будет "Time limit exceeded"
    .catch(console.error);
 
const limitedFunc2 = timeLimited(asyncF, 1500);
 
limitedFunc2(5)
    .then(console.log) // Успеет, выведет 10
    .catch(console.error);

Решение

См. также