js 事件循环 & 宏任务 & 微任务 All In One
js 事件循环 & 宏任务 & 微任务 All In One
Node.js v10+ === Browser js
async function async1() {
console.log('async1 start');
await async2();
console.log('async1 end');
}
async function async2() {
console.log('async2');
}
console.log('script start');
setTimeout(() => {
console.log('setTimeout');
}, 0);
async1();
new Promise(function(resolve) {
console.log('promise1');
resolve();
}).then(function () {
console.log('promise2');
});
console.log('script end');
/*
script start
async1 start
async2
promise1
script end
async1 end
promise2
setTimeout
按照顺序:1. 先依次执行代码中所有同步代码,2. 再执行微任务里面的同步代码,3. 然后依次执行微任务队列里面所有异步微任务,4. 最后执行宏任务队列里面的所有异步宏任务, 5. 直到本次事件循环结束,进入下一次的事件循环♻️;
*/
js 事件循环
步骤
- 先依次执行代码中所有同步代码;
- 再执行微任务里面的同步代码;
- 然后依次执行微任务队列里面所有异步微任务;
- 最后执行宏任务队列里面的所有异步宏任务;
- 直到本次事件循环结束,进入下一次的事件循环♻️;
js 宏任务 macro task
setTimeout/setInterval/setImmediate/requestAnimationFrame/IO/UI rendering/
??? AJAX 请求
js 微任务 micro task
Promise(.then/.catch/.finally/await)/queueMicrotask/process.nextTick/MutationObserver
??? fetch API
微任务仅来自于我们的代码。
它们通常是由 promise 创建的:对 .then/catch/finally 处理程序的执行会成为微任务。
微任务也被用于 await 的“幕后”,因为它是 promise 处理的另一种形式。
还有一个特殊的函数 queueMicrotask(func),它对 func 进行排队,以在微任务队列中执行。
每个宏任务之后,引擎会立即执行微任务队列中的所有任务,然后再执行其他的宏任务,或渲染,或进行其他任何操作。
queueMicrotask
nextTick
process.nextTick
MutationObserver
refs
https://www.cnblogs.com/xgqfrms/p/14025969.html
https://zh.javascript.info/event-loop
©xgqfrms 2012-2025
www.cnblogs.com/xgqfrms 发布文章使用:只允许注册用户才可以访问!
原创文章,版权所有©️xgqfrms, 禁止转载 🈲️,侵权必究⚠️!
本文首发于博客园,作者:xgqfrms,原文链接:https://www.cnblogs.com/xgqfrms/p/15739073.html
未经授权禁止转载,违者必究!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
2020-12-28 bash copy multi files
2020-12-28 Linux bash fi
2020-12-28 docker-compose All In One
2020-12-28 Oh My Zsh & zsh All In One
2020-12-28 Docker in Action All In One
2019-12-28 SVG Tutorials
2019-12-28 SVG to GeoJSON All In One