当前位置: 首页 > news >正文

​​Promise代码理解

1.事件循环与 Promise 执行顺序

案例 1:基础 Promise 同步异步区分
console.log(1);
new Promise(resolve => {console.log(2);resolve();console.log(3);
}).then(() => console.log(4));
console.log(5);

输出顺序:1,2,3,5,4

同步代码优先执行

  • 先执行 console.log(1) → 输出 1
  • 遇到 new Promise,执行构造函数里的同步代码console.log(2) → 输出 2resolve() 标记 Promise 为已完成,但不影响当前同步流程;接着 console.log(3) → 输出 3
  • 继续执行同步代码 console.log(5) → 输出 5

微任务队列执行

  • 同步代码执行完后,检查微任务队列(Promise 的 then 回调属于微任务),执行 then 里的 console.log(4) → 输出 4

先同步再异步,微任务高于宏任务!

案例 2:微任务(Promise) vs 宏任务(setTimeout)
console.log(1);
setTimeout(() => console.log(2), 0);
Promise.resolve().then(() => console.log(3));
console.log(4);

 输出顺序:1, 4, 3, 2

同步代码阶段

  • console.log(1) → 输出 1
  • 遇到 setTimeout(宏任务),丢进宏任务队列,暂不执行
  • 遇到 Promise.resolve().then(微任务),丢进微任务队列
  • console.log(4) → 输出 4

微任务执行阶段

  • 同步代码跑完,先清空微任务队列 → 执行 then 回调 console.log(3) → 输出 3

宏任务执行阶段

  • 微任务清空后,执行宏任务队列里的 setTimeout → 输出 2

先同步再异步,微任务高于宏任务!

2.then/catch 的错误捕获逻辑

案例:Promise 链式调用的错误传递
Promise.reject("error").then(() => console.log("success")).catch(err => console.log(err));

执行流程拆解

  1. Promise.reject("error") 直接生成一个已拒绝的 Promise
  2. 链式调用的 then 回调:因为 Promise 状态是 “拒绝”,then 里的成功回调(() => console.log("success"))会被跳过
  3. 后续的 catch 会捕获到前面传递的错误("error"),执行 console.log(err) → 输出 error

catch兜底,then分流!(catch 主打 “兜底捕获未处理错误”,then 负责 “成功 / 失败的流程分流)

http://www.xdnf.cn/news/1028107.html

相关文章:

  • 如何通过Python从DEM文件生成坡度和坡向数据
  • 读取OpenFOAM二进制polyMesh格式的C/C++程序
  • 手搓中文字符编程语言
  • 一文掌握 Windows 文件传输:5 种命令行工具的原理、参数与示例
  • 中国人工智能证书综合信息表(2025年版)
  • 基于混合预编码的同时进行无线信息和功率传输的毫米波海量MIMO-NOMA
  • 如何确保邮件群发不会被标记为垃圾邮件?
  • 【测试开发】函数高阶-闭包、装饰器
  • P25:LSTM实现糖尿病探索与预测
  • Spring AOP与代理模式
  • 利用 Python 爬虫按关键字搜索 1688 商品
  • mvnd-快速打包maven项目
  • 如何使用自动化测试来提高接口测试的效率
  • 1Panel 618 年中大促|不止半价!
  • 《二叉堆》题集
  • Ubuntu VMware虚拟机卡在/dev/sda1
  • ubuntu调整硬盘大小-使用gparted
  • 板子接入mipi摄像头
  • HTML+CSS 动态菜单和登录框
  • 共建数据强国:政务数据共享的双轮革命
  • 【力扣 简单 C】160. 相交链表
  • C++笔记-C++11(三)
  • 【Spring AI】MCP Server实现多实例部署
  • 【灵动Mini-F5265-OB】ADC之片内温度传感器与参考电压获取
  • springboot+vue大文件断点续传
  • 04 dnsmasq 的环境搭建
  • 【MIPI屏幕调试记录】个人记录用
  • Python+requests+pytest接口自动化测试框架的搭建
  • 专项提升-分析dump堆文件 服务器内存占用排查
  • 在死胡同里 做加法是什么意思?