JavaScript Event Loop Trainer
Интерактивный тренажёр, который помогает понять порядок выполнения JavaScript-кода: синхронные вызовы, микрозадачи, таймеры и async/await.
Как тренироваться
- Выберите сложность и тему задачи.
- Предскажите порядок значений из console.log.
- Проверьте ответ и изучите пошаговую визуализацию Call Stack, Microtask Queue и Task Queue.
Темы
Promise.then, Promise.finally, queueMicrotask, setTimeout, async/await, вложенные колбэки и очереди задач.
Частые вопросы
Почему setTimeout с нулевой задержкой выполняется после Promise.then?
Колбэк setTimeout попадает в очередь макрозадач, а Promise.then — в очередь микрозадач. Движок разбирает все микрозадачи до первой макрозадачи.
Что выполняется раньше: микрозадачи или макрозадачи?
Микрозадачи: после синхронного кода и после каждой макрозадачи их очередь опустошается целиком.
Что происходит с async-функцией после await?
Функция приостанавливается, а код после await выполняется как микрозадача.
Practice JavaScript event loop execution order with synchronous code, microtasks, timers, Promises, and async/await. English version.