Sobes.tech
Senior
39

Bepaal de uitvoer volgorde in de console voor de code met setTimeout, setImmediate, Promise, process.nextTick en fs.readFile.

Bedrijven waar gevraagd werd
Zuru Tech

Antwoord van AI

sobes.tech AI

В Node.js порядок выполнения асинхронных операций зависит от цикла событий и очередей:

  1. process.nextTick — выполняется сразу после текущей операции, до перехода к следующей фазе цикла событий.
  2. Promise.then — микротаски, выполняются после nextTick, но до перехода к макротаскам.
  3. setTimeout — макротаска, выполняется в фазе таймеров.
  4. setImmediate — макротаска, выполняется в фазе check, после I/O.
  5. fs.readFile — асинхронный I/O, колбэк вызывается в фазе poll, до setImmediate.

Примерный порядок вывода:

const fs = require('fs');

fs.readFile(__filename, () => {
  console.log('fs.readFile');
});

setTimeout(() => {
  console.log('setTimeout');
}, 0);

setImmediate(() => {
  console.log('setImmediate');
});

process.nextTick(() => {
  console.log('process.nextTick');
});

Promise.resolve().then(() => {
  console.log('Promise.then');
});

console.log('sync');

Вывод будет примерно:

sync
process.nextTick
Promise.then
fs.readFile
setImmediate
setTimeout

Объяснение:

  • Синхронный код выводится первым.
  • process.nextTick и Promise.then — микротаски, выполняются сразу после синхронного кода.
  • fs.readFile — асинхронный I/O, колбэк вызывается в фазе poll.
  • setImmediate вызывается после poll.
  • setTimeout с 0 задержкой выполняется в фазе таймеров, которая может идти до или после poll, но обычно после setImmediate при чтении файлов.

Важно: точный порядок между setTimeout и setImmediate может зависеть от контекста и версии Node.js.