磚html
setTimeout(() => console.log(1));
setImmediate(() => console.log(2));
process.nextTick(() => console.log(3));
Promise.resolve().then(() => console.log(4));
(() => console.log(5))();
複製代碼
執行結果:node
5
3
4
1
2
複製代碼
node事件分 同步、異步,因爲JS的單線程原理,異步事件的處理方式依靠 事件循環。canvas
不一樣的異步事件,循環規則也不一樣。bash
check
階段是否有事件列隊,有則順序執行。同時也會檢查是否有定時器到達閾值,若是有則循環繞到timers
階段時執行。若是沒有其餘異步任務要處理會一直停留在該階段等待 I/O 結果返回。.on('close', callback)
在同一次循環中process.nextTick總要比Promise.then先執行異步
筆者自畫,理解不當之處,敬請糾正,感激涕零 函數
setTimeout(() => {
process.nextTick(() => {
console.log(1)
process.nextTick(() => console.log(2))
});
console.log(3)
setTimeout(() => { console.log(4)})
setImmediate(() => console.log(5));
});
setTimeout(() => {
process.nextTick(() => console.log(6));
Promise.resolve(7).then(res=>console.log(res))
console.log(8)
});
(() => console.log(9))();
setImmediate(() => console.log(10));
複製代碼
你答對了嗎?oop
9
3
8
1
6
2
7
10
5
4
複製代碼