Код Middle Асинхронные паттерны спрашивают часто обновлено
withTimeout: дедлайн для промиса
Условие
Напиши withTimeout(promise, ms): возвращает промис, который выполняется так же, как promise, но если тот не уложился в ms, отклоняется ошибкой с name === 'TimeoutError' и сообщением Timed out after <ms> ms. Таймер должен очищаться, когда исходный промис завершился (иначе в Node висящий таймер держит процесс живым).
Что проверяют тесты
успел: отдаёт значение
не успел: TimeoutError
ошибка исходного промиса проходит как есть
таймер очищается
уже выполненный промис
Как подойти
Подсказки: 2
Promise.raceмежду исходным промисом и промисом-таймером.finallyподходит, чтобы очистить таймер в обоих исходах.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Предыдущий вопрос
singleFlight: склейка одинаковых запросов
Следующий вопрос
Код-ревью: рассылка уведомлений