首页经验promise微信名 promise属于微任务

promise微信名 promise属于微任务

圆圆2025-11-04 07:00:22次浏览条评论

宏任务与微任务决定执行顺序:同步代码先执行,宏任务如setTimeo ut后于微任务如Promise.then执行。事件循环每次执行一个宏任务后立“Pr “Promise” then 执行”,最后执行下一个宏任务“setTimeout执行”。即使在setTimeout内创Promise: Promise /await也基于微任务,await后面的代码被包装Promise.then,延迟成到微任务阶段机制执行。因此,正确理解宏任务与微任务的优先级和执行时机是掌握JavaScript异步行为的关键。

javascript 微任务队列:理解 promise 与 settimeout 的执行顺序

在JavaScript中,编程注意事件循环(Event Loop)机制,而微任务队列是其中的关键部分。很多人对Promise和setTimeout 阅读更多JavaScript

JavaScript的任务分为两类:宏任务(Macrotask):包括代码整体块、setTimeout、setInterval、I/O、UI渲染等。 微任务(Microtask):包括 Promise.then/catch/finally、MutationObserver、queueMicrotask等。

事件循环每次从宏任务队列中取出一个任务执行,执行完Promise是微任务,setTimeout是宏任务

这是理解执行顺序的核心。看一个经典例子:

立即学习“Java学习免费笔记(深入)”;let Promise = new Promise(resolve => { console.log('Promise 初始化');resolve();});promise.then(() => { console.log('Promise then 执行');});setTimeout(() => { console.log('setTimeout 执行');}, 0);console.log('同步代码结束');

输出结果为:Promise 初始化 同步代码结束 Promise then 执行 setTimeout执行

说明:“Promise初始化”是同步执行的。“同步代码结束” 此时当前宏任务结束,开始处理微任务队列,执行。然后SetTimeout微任务清空后,进入下一个宏任务,执行setTimeout。

微任务在宏任务之间被集中执行

即使在 setTimeout Promise,它的.then 染色体在该宏任务结束后立即执行: Image:

SetTimeout(() => { console.log('宏任务:setTimeout'); Promise.resolve().then(() => { console.log('微任务:setTimeout 内部的 Promise'); });}, 0);Promise.resolve().then(() => { console.log('微任务:外部Promise');});console.log('主流程结束');

输出:主流程结束微任务:外部Promise 宏任务:setTimeout微任务:setTimeout 内部的Promise

解释:“外部Promise”。然后进入下一个宏任务(setTimeout),输出“宏任务:setTimeout”。发现Promise SetTimeout(fn,0)内部 可以立即执行,但实际上只是将任务推入下一个宏任务队列,必须等待所有微任务完成。

另一个误区是认为async/await不产生微任务。实际上,async函数中的await后续代码会被包装成Promise.then,然后微任务。

async function async1() { console.log('async1 开始');await async2(); console.log('async1 结束');}async function async2() { console.log('async2');}async1();console.log('同步代码');

输出:async1 开始 async2 同步代码 async1 结束

因为wait实际上把“async1

p>基本上就这些。掌握微任务和宏任务的执行节奏,就能准确预测JavaScript微任务队列:理解 Promise 与 setTimeout 阅读更多: javascript java mac ai JavaScript catch 循环finally 事件控制台函数 事件promise ui 大家都在看:NestJS DTO中公共方法的最佳实践:数据传输与业务逻辑的划分JS如何与Spring事务传播行为结合_JS与Spring事务传播教程的教程服务端JavaScript微服务架构设计模式JavaScript中的模块联邦(Module Federation)初探_javascript微前端 Android 说明: 利用前台服务实现持久监听

JavaScript
斑马英语APP怎样下载课程内容_斑马英语APP课程离线包下载与安装方法
相关内容
发表评论

游客 回复需填写必要信息