JavaScript: обратный вызов
чем отличаются SetTimeout, setImmediate и process.nextTick в JavaScript и Node.js
 
  
  Функции SetTimeout, setImmediate и process.nextTick очень похожи, запуская обратный вызов по завершнии текущего цикла событий (Event Loop).
SetTimeout
SetTimeout выполняется с задержкой, длительность которой устанавливается в миллисекундах. На практике задержка может продлиться дольше, так как функция выполняется в начале следующего цикла событий, после завершения всей очереди текущего цикла событий. Если таймер установлен на 0, вызов функции происходит “немедленно” - она занимает первое место в очереди событий (Event Queue) следующего цикла событий.
Сам таймер функции SetTimeout не занимает место в очереди событий и вовлекает ресурсы, находящиеся за пределами основного потока.
setImmediate
setImmediate очень похожа на SetTimeout и используется для прерывания длительных операций и запуска функции обратного вызова сразу после того, как браузер завершит текущий цикл событий. Обычно, выполнение этой функции происходит после SetTimeout.
В настоящее время функция setImmediate не соответствует признанным стандартам и не рекомендована к использованию на действующих сайтах, как устаревшая.
process.nextTick
Метод process.nextTick взааимодействует с циклом событий по своему сценарию, запуская функцию обратного вызова сразу после завершения текущего цикла. Можно представить, что process.nextTick встраивается между текущим и следующим циклами, хотя на самом деле он получает максимальный приоритет, отодвигая события в самом начале следующего цикла событий. process.nextTick всегда выполняется до SetTimeout и setImmediate.
Тик (tick) - один полный проход цикла событий
Например:
function run() {
  setTimeout(() => console.log(" I am setTimeout"), 0);
  setImmediate(() => console.log("I am setImmediate"));
  process.nextTick(() => console.log("I am nextTick"));
  console.log("I am current event loop");
}
run()
Получаем в консоли:
I am current event loop
I am nextTick
I am setTimeout
I am setImmediate
Таким образом, SetTimeout, setImmediate и process.nextTick, будут встраиваться в очередь событий по определенным правилам, указанным выше.
Спасибо за внимание.

 
   
   
   
  