Skip to content

Понимание process.nextTick()

При изучении цикла событий Node.js важно понимать функцию process.nextTick(). Каждый полный проход цикла событий называется тиком.

Когда мы передаём функцию в process.nextTick(), мы инструктируем движок выполнить эту функцию в конце текущей операции, перед началом следующего тика цикла событий:

js
process.nextTick(() => {
  // выполнить что-то
})

Цикл событий занят обработкой кода текущей функции. Когда эта операция завершается, JS-движок запускает все функции, переданные в вызовы nextTick во время этой операции.

Это способ указать JS-движку обработать функцию асинхронно (после текущей функции), но как можно скорее, не помещая её в очередь.

Вызов setTimeout(() => {}, 0) выполнит функцию в конце следующего тика, значительно позже, чем при использовании nextTick(), который приоритизирует вызов и выполняет его непосредственно перед началом следующего тика.

Используйте nextTick(), когда вам нужно убедиться, что код будет выполнен уже на следующей итерации цикла событий.

Пример порядка событий:

js
console.log('Hello => number 1')
setImmediate(() => {
  console.log('Running before the timeout => number 3')
})
setTimeout(() => {
  console.log('The timeout running last => number 4')
}, 0)
process.nextTick(() => {
  console.log('Running at next tick => number 2')
})

Пример вывода:

bash
Hello => number 1
Running at next tick => number 2
Running before the timeout => number 3
The timeout running last => number 4

Точный вывод может отличаться от запуска к запуску.