Вопрос проверяет понимание event loop и причин существования очереди microtasks.
Promise.then попадает в microtask queue, чтобы выполняться сразу после текущего синхронного кода. Это даёт более высокий приоритет по сравнению с macrotasks. Такой механизм обеспечивает предсказуемость и согласованность асинхронного поведения. Он позволяет Promise работать быстрее, чем таймеры. Это важная часть спецификации JavaScript.
JavaScript использует несколько очередей задач, и Promise имеет особый приоритет.
Microtasks — это очередь задач, которая:
выполняется после завершения текущего стека вызовов
очищается полностью перед переходом к следующей macrotask
Предсказуемый порядок выполнения
Promise-колбэки выполняются раньше:
setTimeout
setInterval
событий DOM
Целостность асинхронных цепочек
Цепочки then выполняются без вмешательства других задач.
Согласованность со спецификацией
Такое поведение гарантировано стандартом и одинаково во всех движках.
setTimeout(() => console.log('timeout'), 0)
Promise.resolve().then(() => console.log('promise'))
Результат:
promise
timeout
важно при сложных асинхронных сценариях
помогает избегать неожиданного порядка выполнения
критично для библиотек и фреймворков
Promise.then выполняется в microtask queue, чтобы гарантировать высокий приоритет и предсказуемый порядок выполнения асинхронного кода.