> Как работает конструктор Promise, синхронность создания и асинхронность резолва в JavaScript (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: amoCRM, GoInvest, Яндекс
Стек: JavaScript
> Пример ответа
Конструктор Promise принимает одну функцию (executor), которая вызывается синхронно сразу при создании промиса. В эту функцию передаются два аргумента: resolve и reject - тоже функции. Сам executor выполняется в текущем потоке, до того как управление вернётся в вызывающий код. Например:
JAVASCRIPTconsole.log('start');new Promise((resolve) => {console.log('inside executor');resolve('done');});console.log('end');// Вывод: start, inside executor, end
Асинхронность же связана с вызовом resolve или reject. Когда они вызываются, промис переходит в состояние fulfilled или rejected, но обработчики .then(), .catch() и .finally() всегда выполняются асинхронно - в микротасках (microtask queue), после завершения текущего синхронного кода и до следующей макротаски. Даже если resolve вызван синхронно внутри executor, колбэк из .then() не выполнится немедленно:
JAVASCRIPTconsole.log(1);Promise.resolve().then(() => console.log(3));console.log(2);// Вывод: 1, 2, 3
Таким образом, создание промиса и выполнение executor - синхронны, а резолв (переход в выполненное состояние) лишь планирует асинхронный вызов зарегистрированных обработчиков.
> Похожие задачи по frontend
Можно ли сравнить два объекта в JavaScript и как это сделать
Почему новый объект не изменяет исходный объект при передаче в функцию в JavaScript
Что такое метод map в JavaScript и как он работает
Как реализовать функцию auth через колбек в JavaScript
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью