一、宏任务和微任务
JavaScript把异步任务分为宏任务和微任务
es5之后,JavaScript引入了promise,这样,不需要浏览器,JavaScript引擎自身也能发起异步任务
二、宏任务
是由宿主(浏览器、Node)发起
任务(代码) | 宏任务 | 环境 |
script | 宏任务 | 浏览器 |
事件 | 宏任务 | 浏览器 |
网络请求(ajax/Fetch) | 宏任务 | 浏览器 |
setTimeout()一次性定时器 /setInterval()定时器 | 宏任务 | 浏览器 |
三、微任务
由js引擎发起的任务
promise本身同步,then/catch的回调函数是异步的
任务(代码) | 微任务 | 环境 |
Promise | 微任务 | js引擎 |
四、宏任务、微任务执行过程
1.同步代码(js执行栈/回调栈)
2.微任务的异步代码(js引擎)
- process.nextTick(node)
- promise.then() catch()
- async/await
- object.observe
3.宏任务的异步代码(宿主环境)
- script(代码块)
- setTimeout/setInterval定时器
- setImmediate定时器