⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

Node.js 微任务:process.nextTick 与 Promise

区分微任务(Microtask)与宏任务(Macrotask),掌握它们在事件循环中的执行时机。 · 难度:入门 · +15XP

微任务 vs 宏任务

在 Node.js 中,任务分为两类:微任务(Microtask)和宏任务(Macrotask)。微任务在每个宏任务阶段完成后立即执行,优先级高于下一个宏任务。

微任务队列

执行顺序示例

console.log('1');

setTimeout(() => { console.log('2 (宏任务)'); }, 0);

Promise.resolve().then(() => { console.log('3 (微任务)'); });

process.nextTick(() => { console.log('4 (微任务 nextTick)'); });

console.log('5');

// 输出:1, 5, 4, 3, 2 // 注意:nextTick 优先于 Promise.then

微任务递归风险

如果在微任务中不断创建新的微任务(例如递归调用 process.nextTick),会阻塞事件循环,导致 I/O 回调永远无法执行。

function loop() {
  process.nextTick(loop); // 永远卡在微任务阶段
}
loop();

setTimeout(() => { console.log('永远不会执行'); }, 1000);

练习提示

在右侧代码中,添加一个 setImmediate 和一个 Promise,观察它们与 process.nextTick 的执行顺序。尝试在 nextTick 回调中再次调用 nextTick,看看是否会影响后续宏任务。

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 135 篇
0 完成
🔥 0