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

Прерываемый sleep с AbortSignal

Условие

Напиши sleep(ms, signal): промис выполняется через ms мс. Если передан signal и он сработал раньше, промис отклоняется signal.reason и таймер очищается. Если signal уже отменён на момент вызова, промис отклоняется сразу, без таймера. Слушатель abort должен сниматься после завершения (иначе утечка на долгоживущем сигнале).

В Node есть готовый setTimeout из node:timers/promises с опцией signal, здесь пишем свой.

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

  • без сигнала просто ждёт

  • abort прерывает с reason

  • уже отменённый сигнал

  • слушатель снимается после таймера

  • abort после завершения ничего не ломает

Как подойти

Подсказки: 2
  1. Проверь signal.aborted до установки таймера.
  2. В обработчике abort очисти таймер, в колбэке таймера сними слушатель.

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

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

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