Как собственный Promise должен передавать отказ в catch

После отложенного reject должен сработать catch и вывести error; обработчик успеха пропускается. Для этого then обязан вернуть новый Promise и передать в него необработанный отказ.

Короткий ответ

Что ответить на собеседовании

После отложенного reject должен сработать catch и вывести error; обработчик успеха пропускается. Для этого then обязан вернуть новый Promise и передать в него необработанный отказ.

Подробный разбор

Ответ с пояснениями

Условие

Учебный MyPromise должен следовать семантике Promise. Вызван new MyPromise((resolve, reject) => setTimeout(reject, 0)).then(() => console.log('ok')).catch(() => console.log('error')). Какое поведение ожидается?

Ответ

После отложенного reject должен сработать catch и вывести error; обработчик успеха пропускается. Для этого then обязан вернуть новый Promise и передать в него необработанный отказ.

Пока исходный Promise pending, обработчики нужно сохранять. После завершения состояние становится терминальным, а реакции планируются асинхронно. Catch реализуется как then с отсутствующим success-handler. Простое хранение одного callback или возврат this из then обычно ломает цепочки и независимых подписчиков. Это критерии учебной реализации, а не утверждение о не показанном исходном классе.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее