事件循环event loop
const promise = new Promise((resolve, reject) => { console.log(1); resolve(); console.log(2); }) promise.then(() => { console.log(3); }) console.log(4);
以上输出结果为1243
首先Promise新建后立即执行,所以会先输出1,2,而Promise.then()内部的代码在当次事件循环的结尾立即执行,所以会先输出4,最后输出3.
事件循环里面有宏任务和微任务:
宏任务有setTimeout、setInterval、 setImmediate、script(整体代码)、 I/O 操作等
微任务有process.nextTick、new Promise().then(回调)
Node与浏览器的 Event Loop 差异:
node11及之后与浏览器保持一致,先执行一个宏任务,宏任务执行完把当前的微任务清空
node10及之前允许多个宏任务先执行,然后再按顺序清空宏任务对应的微任务队列
1 2 3 4 5 6 7 8 9 10 11 12 | setTimeout(()=>{ console.log( 'timer1' ) Promise.resolve().then( function () { console.log( 'promise1' ) }) }, 0) setTimeout(()=>{ console.log( 'timer2' ) Promise.resolve().then( function () { console.log( 'promise2' ) }) }, 0) |
在浏览器中执行输出:timer1 promise1 timer2 promise2
node10执行输出:timer1 timer2 promise1 promise2
node11执行输出:timer1 promise1 timer2 promise2与浏览器保持一致
posted on 2020-03-01 23:39 yemiaomiao 阅读(552) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话