Когда вы пытаетесь понять event loop в Node.js, одна из его важных частей — process.nextTick().
Каждый раз, когда среда выполнения возвращает управление обратно в JavaScript для обработки события, мы называем это тиком (tick).
Когда мы передаём функцию в process.nextTick(), мы планируем её выполнение сразу после того, как завершится текущий стек вызовов, — до того, как event loop продолжится, и до обработки любых других задач или фаз в очереди:
process.nextTick(() => {
// делаем что-то
});Event loop занят обработкой кода текущей функции. Когда эта операция завершается, движок JS выполняет все функции, переданные в вызовы nextTick во время этой операции.
Это способ сказать движку JS обработать функцию асинхронно (после текущей функции), но как можно скорее, а не ставить её в очередь.
Вызов setTimeout(() => {}, 0) планирует колбэк на будущую итерацию event loop — гораздо позже, чем при использовании process.nextTick(), который выполняется до того, как event loop продолжится.
Используйте nextTick(), когда хотите быть уверены, что к следующей итерации event loop этот код уже выполнен.
Чтобы узнать больше о порядке выполнения и о том, как работает event loop, посмотрите посвящённую этому статью.