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

Свой Promise

Условие

Реализуй MyPromise с конструктором (executor), then(onFulfilled, onRejected) и цепочкой. Синхронный executor, асинхронные колбэки, поддержка возврата промиса из then.

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

  • разрешается значением

  • асинхронное разрешение

  • колбэк всегда асинхронный

  • цепочка передаёт значение

  • возврат промиса разворачивается

  • ошибка ловится catch

  • состояние не меняется дважды

Как подойти

Задача проверяет, понимаешь ли ты промис как автомат состояний. Четыре обязательных вещи: однократный переход состояния, очередь колбэков на случай ожидания, асинхронность колбэков (queueMicrotask - иначе нарушается контракт и порядок выполнения станет непредсказуемым), и разворачивание thenable для цепочек. Пробрасывание ошибки, когда onRejected не передан, - то, благодаря чему catch в конце цепочки ловит всё.

Подсказки: 4
  1. Три состояния и переход только один раз - это первый инвариант.
  2. Колбэки, добавленные до разрешения, копятся в очереди.
  3. then обязан возвращать новый промис, иначе не будет цепочки.
  4. Если onFulfilled вернул thenable, его надо дождаться и развернуть.

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

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