PassFront
  1. PassFront
  2. База знаний
  3. Асинхронность и Event Loop

Когда сработает созданный Promise?

Асинхронность и Event Loop

Созданный через `new Promise` промис начинает выполнять свой исполнитель (executor) немедленно и синхронно, а коллбэки `then/catch` срабатывают позже — как микрозадачи после разрешения.

Исполнитель выполняется сразу

Функция, переданная в new Promise, вызывается синхронно, в момент создания:

console.log('до');
const p = new Promise((resolve) => {
  console.log('исполнитель'); // выполнится сразу, синхронно
  resolve(42);
});
console.log('после');
// до → исполнитель → после

then срабатывает позже (микрозадача)

Коллбэк then вызывается после разрешения промиса и всегда асинхронно — через очередь микрозадач:

Promise.resolve().then(() => console.log('then'));
console.log('sync');
// sync → then

Когда именно разрешится

  • Если resolve вызван синхронно — промис разрешён сразу, но then всё равно в микрозадаче.
  • Если resolve внутри setTimeout/запроса — после завершения асинхронной операции.
new Promise((resolve) => setTimeout(() => resolve('готово'), 1000))
  .then(console.log); // через ~1 секунду

Коротко для собеседования

Исполнитель new Promise выполняется немедленно и синхронно при создании. Коллбэк then — всегда асинхронно, в очереди микрозадач, после разрешения (сразу, если resolve синхронный, или позже — после асинхронной операции). Поэтому then идёт после синхронного кода.

Другие вопросы раздела