Sobes.tech
Back to questions
Middle+
2

Реализовать функцию withTimeout, которая принимает функцию и время (миллисекунды) и возвращает новую функцию. Если исходная функция не выполнится за заданное время, промис должен быть отклонён.

Companies where asked
Яндекс

Answer from AI

sobes.tech AI

Функция withTimeout должна принимать функцию, которая возвращает промис, и время в миллисекундах. Она возвращает новую функцию, которая при вызове запускает исходную функцию и одновременно таймер. Если исходная функция не успевает завершиться за заданное время, промис отклоняется с ошибкой таймаута.

Пример реализации на JavaScript:

function withTimeout(fn, ms) {
  return function(...args) {
    return new Promise((resolve, reject) => {
      const timer = setTimeout(() => {
        reject(new Error('Timeout'));
      }, ms);

      fn(...args)
        .then(result => {
          clearTimeout(timer);
          resolve(result);
        })
        .catch(err => {
          clearTimeout(timer);
          reject(err);
        });
    });
  };
}

// Использование:
// const fetchWithTimeout = withTimeout(fetch, 5000);
// fetchWithTimeout('https://example.com').then(...).catch(...);