Event Loop

Event Loop的事件分两种,宏任务(macro-task)和微任务(micro-task)

任务有同步任务和异步任务,同步任务进入主线程,异步任务进入事件表并注册函数,异步事件完成后,会将回调函数放入事件队列中(宏任务和微任务是不同的队列),同步任务执行完成后,会从事件队列中读取事件放入主线程执行,回调函数中可能还会包含不同的任务,因此会循环执行上述操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
console.log('1');

setTimeout(function () {
console.log('2');
process.nextTick(function () {
console.log('3');
})
new Promise(function (resolve) {
console.log('4');
resolve();
}).then(function () {
console.log('5')
})
})
process.nextTick(function () {
console.log('6');
})
new Promise(function (resolve) {
console.log('7');
resolve();
}).then(function () {
console.log('8')
})

setTimeout(function () {
console.log('9');
process.nextTick(function () {
console.log('10');
})
new Promise(function (resolve) {
console.log('11');
resolve();
}).then(function () {
console.log('12')
})
})