Код выполняется в одном потоке. Долгие операции (сеть, таймеры) идут вне его, а их колбэки ставятся в очереди. Event loop: выполнить задачу из стека → выполнить все микрозадачи (промисы, queueMicrotask) → отрисовать кадр при необходимости → взять следующую макрозадачу (таймер, событие, сообщение).
console.log(1);
setTimeout(() => console.log(2));
Promise.resolve().then(() => console.log(3));
console.log(4);
// 1 4 3 2
Что важно знать
- Промис: pending → fulfilled или rejected, один раз.
thenвозвращает новый промис — отсюда цепочки. Promise.allпадает на первой ошибке,allSettledждёт всех,race— первый завершившийся,any— первый успешный.async/await— синтаксис над промисами; ошибки ловятtry/catch.- Последовательные
awaitв цикле там, где запросы независимы, — частая потеря скорости; параллельно —Promise.all. - Долгий синхронный код блокирует интерфейс: его дробят или выносят в Web Worker.
- Отмена запросов —
AbortController.