StudyCode
Как JavaScript выполняет асинхронный код: стек вызовов, очереди задач, микрозадачи.
console.log('start');
setTimeout(() => console.log('setTimeout!'), 0);
Promise.resolve().then(() => console.log('Promise!'));
console.log('end');
// Вывод:
// start
// end
// Promise!
// setTimeout!JS выполняет код в одном потоке — только одна операция в каждый момент. Это значит, что длинная операция заблокирует всё остальное.
// Синхронный код — выполняется по порядку, блокирует поток
console.log("первый");
console.log("второй");
console.log("третий");
// первый → второй → третий
// Но что если нужно подождать данные с сервера?
// Нельзя просто написать:
const data = fetch("/api/data"); // fetch возвращает Promise, а не данныеJS передаёт медленные операции (сеть, таймеры, файлы) браузеру/Node.js, а сам продолжает выполнять код. Когда операция завершится — колбэк попадёт в очередь.
console.log("до");
setTimeout(() => {
console.log("через 1 секунду"); // выполнится позже
}, 1000);
console.log("после"); // выполнится сразу, не ждёт setTimeout
// Вывод:
// до
// после
// через 1 секунду