Понимание process.nextTick()
При изучении цикла событий Node.js важно понимать функцию process.nextTick()
. Каждый полный проход цикла событий называется тиком.
Когда мы передаём функцию в process.nextTick()
, мы инструктируем движок выполнить эту функцию в конце текущей операции, перед началом следующего тика цикла событий:
process.nextTick(() => {
// выполнить что-то
})
Цикл событий занят обработкой кода текущей функции. Когда эта операция завершается, JS-движок запускает все функции, переданные в вызовы nextTick
во время этой операции.
Это способ указать JS-движку обработать функцию асинхронно (после текущей функции), но как можно скорее, не помещая её в очередь.
Вызов setTimeout(() => {}, 0)
выполнит функцию в конце следующего тика, значительно позже, чем при использовании nextTick()
, который приоритизирует вызов и выполняет его непосредственно перед началом следующего тика.
Используйте nextTick()
, когда вам нужно убедиться, что код будет выполнен уже на следующей итерации цикла событий.
Пример порядка событий:
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')
})
Пример вывода:
Hello => number 1
Running at next tick => number 2
Running before the timeout => number 3
The timeout running last => number 4
Точный вывод может отличаться от запуска к запуску.