Код Middle Асинхронные паттерны спрашивают часто обновлено

withTimeout: дедлайн для промиса

Условие

Напиши withTimeout(promise, ms): возвращает промис, который выполняется так же, как promise, но если тот не уложился в ms, отклоняется ошибкой с name === 'TimeoutError' и сообщением Timed out after <ms> ms. Таймер должен очищаться, когда исходный промис завершился (иначе в Node висящий таймер держит процесс живым).

Что проверяют тесты

  • успел: отдаёт значение

  • не успел: TimeoutError

  • ошибка исходного промиса проходит как есть

  • таймер очищается

  • уже выполненный промис

Как подойти

Подсказки: 2
  1. Promise.race между исходным промисом и промисом-таймером.
  2. finally подходит, чтобы очистить таймер в обоих исходах.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.

Термины по теме