Menu
CoddyTech

Цикл событий

Часть раздела Основы Node.js путешествия по Node.js на Coddy. Урок 18 из 24.

Обратные вызовы и промисы выполняются позже, и ошибки возникают, если точно не знать, когда именно.

Сначала Node выполняет весь синхронный код до конца. Затем он выполняет микрозадачи: обратные вызовы промисов и функции, переданные в queueMicrotask. Только после этого запускаются таймеры, даже setTimeout(fn, 0), каждый — когда истечёт его время.

setTimeout(() => console.log('C timer'), 0);
Promise.resolve().then(() => console.log('B promise'));
console.log('A sync');
// A sync, B promise, C timer

Задержка 0 означает «как можно скорее после микрозадач», но никогда не раньше них. Таймеры срабатывают в порядке задержки; при одинаковой задержке первым срабатывает таймер, установленный первым.

challenge icon

Задание

Легко
  • order.js выводит 1 sync, 2 microtask, 3 timeout, 4 timeout later именно в таком порядке.
  • Оставь четыре строки на своих местах. Оберни их в один вызов queueMicrotask и два вызова setTimeout.

Запусти node order.js и сравни результат со своим предположением. Затем установи задержку обоих таймеров равной 0 и запусти программу ещё раз.

Попробуйте сами

// Сделайте так, чтобы эти строки выводились в порядке номеров, не перемещая их.
// Вместо этого оберните их в queueMicrotask и setTimeout.
console.log('4 timeout later');
console.log('3 timeout');
console.log('2 microtask');
console.log('1 sync');
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы Node.js