Код Middle Реализация с нуля обновлено

Отменяемая операция

Условие

Напиши makeCancelable(promise): вернуть {promise, cancel}. После cancel() итоговый промис отклоняется объектом {canceled: true}, а исходный результат игнорируется.

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

  • обычный результат проходит

  • после cancel результат игнорируется

  • ошибка пробрасывается

Как подойти

Промис неотменяем по спецификации: мы отменяем не работу, а подписку. Флаг canceled + проверка в обоих обработчиках. Настоящая отмена сетевого запроса - это AbortController и signal, проговори это вслух как follow-up.

Подсказки: 2
  1. Промис нельзя отменить - можно только перестать реагировать на его результат.
  2. Флаг в замыкании проверяется в обоих колбэках.

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

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