JavaScript-微服务和宏服务
# JS是单线程的语言
- 单线程:同一时间只能做一件事(作为浏览器脚本语言,JS的主要用途是与用户互动,以及操作DOM,因此决定了它只能是单线程)
- 单线程怎么执行异步代码?所有任务需要排队,前一个任务结束,才会执行后一个任务
# JS代码执行流程
同步执行完 ---> 事件循环
执行完同步,才会执行事件循环的内容
进入事件循环:请求、定时器、事件...
for(var i = 0;i < 3;i++){
setTimeout(function(){
console.log(i)//3 3 3
},1000*i)
}
console.log(222)
//3
//3
//3
//222
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 事件循环:【微任务、宏任务】
微任务:promise.then
宏任务:setTimeout
要执行宏任务的前提是清空了所有的微任务
流程:同步 --> 事件循环【微任务和宏任务】 --> 微任务 --> 宏任务 --> 微任务
setTimeout(function(){
console.log('1')
})
new Promise((resolve) => {
console.log('1 Promise 1')//同步
resolve()
}).then(() => {
console.log('微任务1')
}).then(() => {
console.log('微任务2')
})
console.log(2)//同步
//1 Promise 1
//2
//微任务1
//微任务2
//1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
上次更新: 2024/08/14, 04:14:33