После отложенного reject должен сработать catch и вывести error; обработчик успеха пропускается. Для этого then обязан вернуть новый Promise и передать в него необработанный отказ.
Как собственный Promise должен передавать отказ в catch
После отложенного 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 обычно ломает цепочки и независимых подписчиков. Это критерии учебной реализации, а не утверждение о не показанном исходном классе.