> Как работает конструктор Promise, синхронность создания и асинхронность резолва в JavaScript (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: amoCRM, GoInvest, Яндекс

Стек: JavaScript

> Пример ответа

Конструктор Promise принимает одну функцию (executor), которая вызывается синхронно сразу при создании промиса. В эту функцию передаются два аргумента: resolve и reject - тоже функции. Сам executor выполняется в текущем потоке, до того как управление вернётся в вызывающий код. Например:

JAVASCRIPT
console.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() не выполнится немедленно:

JAVASCRIPT
console.log(1);
Promise.resolve().then(() => console.log(3));
console.log(2);
// Вывод: 1, 2, 3

Таким образом, создание промиса и выполнение executor - синхронны, а резолв (переход в выполненное состояние) лишь планирует асинхронный вызов зарегистрированных обработчиков.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью