Когда сработает созданный 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 идёт после синхронного кода.