Во всех трёх случаях вызывающий получает отклонённый Promise, если обычная функция возвращает Promise.reject или созданный Promise. Синхронный throw вне Promise — другой случай.
В чём разница в поведении трёх функций: async-функции с throw, функции с Promise.reject и функции с new Promise, внутри executor которой выбрасывается ошибка?
Во всех трёх случаях вызывающий получает отклонённый 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 автоматически не перехватывается.