Как асинхронность влияет на несовпадение результата в консоли и вызванного кода?
Асинхронность и Event Loop
Асинхронность влияет на несовпадение порядка в консоли так: синхронный код выполняется сразу и выводится первым, а асинхронные коллбэки — позже, поэтому вывод не совпадает с порядком строк в коде.
Почему возникает несовпадение
Асинхронные операции (setTimeout, промисы, запросы) не выполняются в момент вызова — их коллбэки откладываются и выполняются позже через Event Loop. Синхронный код выполняется сразу:
console.log('1'); // синхронно
setTimeout(() => console.log('2'), 0); // коллбэк отложен
Promise.resolve().then(() => console.log('3')); // отложен (микрозадача)
console.log('4'); // синхронно
// Вывод: 1, 4, 3, 2 — НЕ по порядку строк!Порядок объясняется Event Loop
- Синхронный код по порядку:
1,4. - Микрозадачи (Promise):
3. - Макрозадачи (setTimeout):
2.
Поэтому строка 2 в коде выводится последней, хотя написана раньше 4.
Частая ловушка
async function load() {
const data = await fetch(url); // асинхронно
console.log('данные:', data); // выполнится позже
}
load();
console.log('после вызова'); // выполнится РАНЬШЕ "данные"после вызова выведется раньше, чем данные, хотя написано после load().
Как понимать
- Синхронный код — сразу, по порядку.
- Асинхронные коллбэки — позже (микрозадачи → макрозадачи).
- Вывод в консоли отражает порядок выполнения, а не порядок строк.
Коротко для собеседования
Асинхронность вызывает несовпадение: синхронный код выполняется и выводится сразу, по порядку, а асинхронные коллбэки (setTimeout, промисы) откладываются и выполняются позже через Event Loop (микрозадачи → макрозадачи). Поэтому вывод в консоли отражает порядок выполнения, а не порядок строк в коде (1, 4, 3, 2).