Что такое очереди задач: `macrotasks` и `microtasks`, и как они влияют на порядок выполнения кода?
Когда асинхронная задача попадает в Call Stack, она передается во внешнюю систему, которая после завершения добавляет её callback в macroTasks Queue или microTasks Queue. Когда Call Stack становится пустым, сначала обрабатываются все задачи из microTasks Queue, а затем берётся одна задача из macroTasks Queue. После каждой макрозадачи снова выполняются все накопившиеся микрозадачи.