Event Loop
2020-01-20 本文已影响0人
BingeryLamb
- 执行全局script
完毕调用栈Stack会清空 - microtask queue中取出位于队首的回调任务, 放入调用栈Stack中执行
执行完后, 继续取出位于队首的任务,放入调用栈Stack中执行
以此类推, 直到microtask queue中的所有任务都执行完毕
microtask queue为空队列, 调用栈Stack也为空 - macrotask queue中取出位于队首的任务, 放入Stack中执行
执行完毕后, 调用栈Stack为空 - 重复2-3
重复2-3
...
宏队列
macrotask
一些异步任务的回调会依次进入macro task queue, 等待后续被调用
I/O
...
微队列
一些异步任务的回调会依次进入micro task queue, 等待后续被调用
process.nextTick (Node独有)
...
console.log(1);
setTimeout(() => {
console.log(2);
Promise.resolve().then(() => {
console.log(3)
});
});
new Promise((resolve, reject) => {
console.log(4)
resolve(5)
}).then((data) => {
console.log(data);
})
setTimeout(() => {
console.log(6);
})
console.log(7);
// 1 4 7 5 2 3 6