В чём разница в поведении трёх функций: async-функции с throw, функции с Promise.reject и функции с new Promise, внутри executor которой выбрасывается ошибка?

Во всех трёх случаях вызывающий получает отклонённый Promise, если обычная функция возвращает Promise.reject или созданный Promise. Синхронный throw вне Promise — другой случай.

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

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

Во всех трёх случаях вызывающий получает отклонённый Promise, если обычная функция возвращает Promise.reject или созданный Promise. Синхронный throw вне Promise — другой случай.

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

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

Во всех трёх случаях вызывающий получает отклонённый Promise, если обычная функция возвращает Promise.reject или созданный Promise. Синхронный throw вне Promise — другой случай.

Async-функция превращает throw в rejection. Promise.reject(error) сразу создаёт отклонённый Promise. Синхронное исключение executor перехватывает конструктор Promise. Для обработки используйте catch либо try/catch вокруг await; обычный try/catch без await не поймает будущий rejection. Исключение внутри позднего callback таймера executor автоматически не перехватывается.

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

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

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

Подробнее