Цикл событий
Часть раздела Основы 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 означает «как можно скорее после микрозадач», но никогда не раньше них. Таймеры срабатывают в порядке задержки; при одинаковой задержке первым срабатывает таймер, установленный первым.
Задание
Легко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');
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы Node.js
1Запуск JavaScript в Node
Знакомство с NodeАргументы командной строкиКоманды