Прерываемый sleep с AbortSignal
Условие
Напиши sleep(ms, signal): промис выполняется через ms мс. Если передан signal и он сработал раньше, промис отклоняется signal.reason и таймер очищается. Если signal уже отменён на момент вызова, промис отклоняется сразу, без таймера. Слушатель abort должен сниматься после завершения (иначе утечка на долгоживущем сигнале).
В Node есть готовый setTimeout из node:timers/promises с опцией signal, здесь пишем свой.
Что проверяют тесты
без сигнала просто ждёт
abort прерывает с reason
уже отменённый сигнал
слушатель снимается после таймера
abort после завершения ничего не ломает
Как подойти
Подсказки: 2
- Проверь
signal.abortedдо установки таймера. - В обработчике abort очисти таймер, в колбэке таймера сними слушатель.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Предыдущий вопрос
Последовательные await и Promise.all
Следующий вопрос
Расписание экспоненциального backoff