惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

罗磊的独立博客
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
MyScale Blog
MyScale Blog
M
MIT News - Artificial intelligence
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
The Blog of Author Tim Ferriss
Martin Fowler
Martin Fowler
博客园 - 【当耐特】
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
宝玉的分享
宝玉的分享
Engineering at Meta
Engineering at Meta
WordPress大学
WordPress大学
Google DeepMind News
Google DeepMind News
C
Check Point Blog
Last Week in AI
Last Week in AI
F
Fortinet All Blogs
博客园 - 聂微东
Blog — PlanetScale
Blog — PlanetScale
H
Help Net Security
GbyAI
GbyAI
云风的 BLOG
云风的 BLOG

博客园 - 悉野

go编译期接口断言 / 编译期接口检查(compile-time interface assertion / compile-time interface check) Go 的类型断言 ssh连结vmware中ubuntu的共享文件夹 spring加载冲突问题 spring一个错误修正 抓安卓日记到文件 注册表删除桌面顽固图标 github买的账号无法拉取代码的解决方法 apk常用命令 java服务器异常处理 ES6 学习难度分层 材质, 纹理, shader之间的关系 TCP与UDP区别 javascript中=>与function的区别 javascript中函数解析过程 cocos使用fgui 几种服务注册与发现的区别 mybatis测试 向量点乘与叉乘 unity画布3种渲染模式 go学习笔记10(HTTP) go学习笔记9(TCP) go学习笔记8(反射) c++简单的线程池 operator new 是 C++ 动态内存分配的核心函数,负责分配原始内存,不调用构造函数 C++的定位放置new(Placement new) go学习笔记7(泛型,文件读写,测试) go学习笔记6(协程与channel,select使用,线程安全,异常处理) go学习笔记5(函数,结构体,自定义类型和类别名,接口) go学习笔记4(数组与切片,map,if,switch,for循环)
promise原理
悉野 · 2026-05-11 · via 博客园 - 悉野

Promise 的本质可以概括为一句话:

Promise 是一个“异步任务的状态容器 + 回调队列管理器”

它并不让异步变成同步,而是把“未来才会知道的结果”抽象成一个对象,让你可以用统一的方式去处理成功、失败和链式调用。

一、Promise 最核心的思想

Promise 围绕三点:

  1. 状态机(三种状态)

  2. 保存异步结果(值 / 原因)

  3. 收集回调,并在合适时机统一触发


二、Promise 的三种状态

关键规则:

  • 初始状态:pending

  • 一旦从 pending → fulfilled / rejected状态不可再改变

  • 同一个 Promise 永远不会同时触发 thencatch


三、Promise 内部“大概长什么样”(原理级结构)

用一个简化模型理解(非源码):

核心点:

  • resolve / reject改变状态

  • 回调先存起来(队列)

  • 若异步完成后才添加回调,仍要能触发 → 所以要用数组收集


四、then 的原理(最关键)

1. then 做了什么?

它的职责:

  • 注册成功 / 失败回调

  • 返回一个新的 Promise(实现链式调用)

  • 处理返回值(普通值 / Promise / thenable)


2. then 的简化逻辑

关键点:

  • then 永远返回新 Promise

  • 回调是异步执行的(微任务)

  • 返回值会决定下一个 Promise 的状态


五、为什么 Promise 是异步的(微任务)

输出:

原因:

  • Promise 的 then/catch/finally回调

    → 被设计成 微任务(Microtask)

  • 在事件循环中:

    • 先执行同步代码

    • 再执行微任务

    • 再执行宏任务(setTimeout 等)


六、Promise 链式调用的本质

本质是:

每一次 then

  • 返回新的 Promise

  • 上一个 Promise 的结果 → 传给下一个 onFulfilled

如果返回的是一个 Promise:

则:

  • 等待该 Promise 完成

  • 再决定下一个 then 的状态


七、Promise 解决“回调地狱”的原理

回调地狱:

Promise 的做法:

  • 把“下一步要做什么”从嵌套变成返回值和队列

  • 用统一接口(then/catch)管理成功和失败

本质不是“更异步”,而是:

把异步控制流结构化


八、一句话总结 Promise 原理

**Promise 内部维护一个状态机和回调队列;

异步操作完成后变更状态并执行回调;

then 返回新 Promise,使链式调用和统一错误处理成为可能。**