</>
⌕
Mid #event-loop#nextTick#microtask#setImmediate

process.nextTick, Promise và setImmediate khác nhau thế nào?

⚡ Trả lời nhanh

Sau thao tác hiện tại, Node chạy hàng đợi process.nextTick trước, rồi microtask của Promise, sau đó mới tới các pha event loop; setImmediate chạy ở pha check, setTimeout ở pha timers. nextTick đệ quy có thể làm đói I/O.

setTimeout(() => console.log("timeout"), 0);
setImmediate(() => console.log("immediate"));
Promise.resolve().then(() => console.log("promise"));
process.nextTick(() => console.log("nextTick"));
console.log("sync");
// sync, nextTick, promise, rồi timeout/immediate (thứ tự 2 cái này không cố định)
APIHàng đợiChạy khi
process.nextTicknextTick queueNgay sau thao tác hiện tại, trước mọi microtask
Promise.then, queueMicrotaskmicrotask queueSau nextTick queue, trước khi sang pha tiếp theo
setTimeouttimersPha timers khi hết hạn
setImmediatecheckPha check, ngay sau poll

Với CommonJS, nextTick được xả trước promise. Với ES module (code top-level chạy trong một promise job), promise có thể chạy trước nextTick.

🃏 Ôn bằng flashcard