Back to questions
Senior
3
Определите порядок вывода в консоли для кода с setTimeout, setImmediate, Promise, process.nextTick и fs.readFile.
Companies where asked
Zuru Tech
Answer from AI
sobes.tech AI
В Node.js порядок выполнения асинхронных операций зависит от цикла событий и очередей:
- process.nextTick — выполняется сразу после текущей операции, до перехода к следующей фазе цикла событий.
- Promise.then — микротаски, выполняются после nextTick, но до перехода к макротаскам.
- setTimeout — макротаска, выполняется в фазе таймеров.
- setImmediate — макротаска, выполняется в фазе check, после I/O.
- 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.