首页/新闻资讯/正文详情

Promise 本质

发布时间:2026/9/23 14:31:01 来源:云帆数科 栏目:资讯中心
Promise 本质
一句话高度概括Promise 是一套「异步状态管理模型」基于发布订阅模式用来封装异步操作提供统一规范来处理异步成功 / 失败结果它不是消除异步只是改造异步代码的组织形式。逐层拆解本质1. 底层核心状态机最根本Promise 内部维护有限状态机三种状态pending / fulfilled / rejected约束规则初始pending只能单向流转pending → fulfilled或者pending → rejected状态一旦落定永久不可修改多次调用resolve/reject无效。为什么要有状态机 回调函数最大痛点无法得知异步是否已经完成。 如果异步先执行完、回调后注册普通回调无法触发 Promise 通过状态记录结果异步未完成把.then的回调存入队列异步已完成直接立刻执行回调2. 实现模式发布订阅观察者模式new Promise(executor)executor 同步执行启动异步任务开发者调用resolve()/reject()→发布通知.then/catch注册回调 →订阅事件。内部维持两个数组onFulfilledCallbacks [] // 成功回调队列 onRejectedCallbacks [] // 失败回调队列流程异步还没结束then 传入的函数 push 进对应队列resolve 执行 → 依次取出onFulfilledCallbacks执行✅ 和普通事件总线区别事件只能触发一次状态凝固后后续订阅可以直接收到缓存好的值。示例差异const p Promise.resolve(123); // 哪怕promise已经成功后写的then依旧正常执行 p.then(res console.log(res))3. .then 链式的本质then()一定会返回全新的 Promise不是返回自身p.then().then().then() // 每一个.then都是一个新Promise实例内部逻辑捕获上一层回调返回值如果返回普通值 → 新 Promise 直接 resolve 这个值如果返回 Promise → 等待这个 Promise 完成再向下传递如果回调抛出异常 → 新 Promise 直接 reject。链式之所以能纵向书写、消灭回调嵌套根源就在每次都产出新 Promise持续提供 then 入口。4. 调度本质微任务规范要求then/catch/finally的回调必须异步执行微任务哪怕 Promise 已经完成回调也要放入微任务队列不能同步立刻执行。 目的保证代码执行顺序稳定避免同步 / 异步交替造成诡异 bug。Promise.resolve().then(()console.log(微任务)) console.log(同步代码) // 同步代码先打印5. Promise 解决了什么底层痛点本质价值原生回调模式缺陷回调嵌套回调地狱无法统一处理错误不能灵活组合多个异步并发、竞速无法二次订阅异步跑完回调来不及注册就丢失结果Promise 通过「状态缓存 标准化接口」解决上面问题。6. 容易踩的认知误区❌ 误区 1Promise 异步new Promise的 executor是同步执行的Promise 只是封装异步的容器本身不是异步。❌ 误区 2Promise 替代回调 Promise 底层依旧靠回调只是把回调从「参数传入」改成「链式注册」。❌ 误区 3async/await 脱离 Promiseasync/await是 Promise 的语法糖底层完全基于 Promise 实现没有 Promise 就不存在 await。面试精简口述版直接背诵Promise 本质是带状态机的异步结果容器基于发布订阅模式实现。 内部维护 pending、fulfilled、rejected 三种单向凝固状态 异步未完成时收集 then 注册的回调异步完成后触发回调队列 then 每次返回全新 Promise支持链式调用 规范强制使用微任务调度回调提供统一接口管理异步成功、失败解决传统回调地狱、异步结果无法复用、错误难以统一捕获等问题。

相关推荐

终极指南:如何在Mac上完美配置Video DownloadHelper配套应用程序
终极指南:如何在Mac上完美配置Video DownloadHelper配套应用程序

终极指南:如何在Mac上完美配置Video DownloadHelper配套应用程序 【免费下载链接】vdhcoapp Companion application for Video DownloadHelper browser add-on 项目地址: https://gitcode.com/gh_mirrors/vd/vdhcoapp Video DownloadHelper配套应用程序&… · 2026/9/23 14:30:54

AI编程工具常见问题与实战解决方案
AI编程工具常见问题与实战解决方案

1. AI编程工具使用问题全景解析 最近两年AI编程工具的爆发式增长,让开发者们既兴奋又困惑。从最初的代码补全到现在的全功能AI编程助手,这些工具正在彻底改变我们的开发方式。但随之而来的,是各种使用中的"水土不服"问题。 我整理… · 2026/8/31 8:32:42

程序员如何高效搭建AI知识库:架构设计与实战技巧
程序员如何高效搭建AI知识库:架构设计与实战技巧

1. 项目概述:为什么每个程序员都需要AI知识库? 去年帮团队搭建第一个AI知识库时,我踩遍了所有能想到的坑:本地部署的模型突然失联、RAG检索返回无关内容、微调后的效果还不如原版...这些经历让我意识到,大模型时代的知… · 2026/9/16 9:19:51

供配电系统毕业设计全流程:从负荷计算到设备选型的工程逻辑
供配电系统毕业设计全流程:从负荷计算到设备选型的工程逻辑

简介:一份面向电气工程专业毕业设计或课程设计的完整文档,内容针对某机械厂供配电系统从负荷测算、无功补偿到主变压器选型与主接线方案设计展开,同时覆盖短路电流计算和高低压电气设备选择校验,适合需要参考毕业设计框架与计算过… · 2026/9/23 14:31:01

UHFReader09 C# DEMO 实战:串口/TCP 盘存与避坑指南
UHFReader09 C# DEMO 实战:串口/TCP 盘存与避坑指南

简介:这是一份面向C#开发者与RFID入门者的UHF RFID阅读器演示工程,围绕UHFReader09设备型号展开,帮助读者理解如何用C#与超高频阅读器通信、控制参数并处理标签数据,可应用于仓储管理、物流追踪、资产盘点等长距离识别场景。压缩包… · 2026/9/23 14:30:54

柳青丈夫面试必问避坑指南 3天搞定环境配置
柳青丈夫面试必问避坑指南 3天搞定环境配置

柳青丈夫面试必问避坑指南 3天搞定环境配置 配置环境就卡半天,这大概是每个程序员入行时最痛的记忆。你盯着黑底白字的终端窗口,报错信息滚得飞快,脑子里全是“我到底哪步错了”。更扎心的是,当你终于跑通Hello… · 2026/9/23 14:30:54

Flet ExpansionTileTheme 主题配置指南:用 Python 全局定制 ExpansionTile 外观
Flet ExpansionTileTheme 主题配置指南:用 Python 全局定制 ExpansionTile 外观

Flet ExpansionTileTheme 主题配置指南:用 Python 全局定制 ExpansionTile 外观 【免费下载链接】flet Build realtime web, mobile and desktop apps in Python only. No frontend experience required. 项目地址: https://gitcode.com/gh_mirrors/fl/flet … · 2026/9/23 14:30:54

Prisma API 详解:基于数据模型自动生成的 GraphQL 接口与 Playground 探索指南
Prisma API 详解:基于数据模型自动生成的 GraphQL 接口与 Playground 探索指南

后端数据库GraphQL 【免费下载链接】prisma1 💾 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL & MongoDB) [deprecated] 项目地址: https://gitcode.com/gh_mirrors/pr/prisma1 点击查看 免费下载 本篇指南聚焦 Prisma&… · 2026/9/23 14:30:48

Nginx UI 集成 Casdoor:OAuth 2.0 统一身份认证接入指南
Nginx UI 集成 Casdoor:OAuth 2.0 统一身份认证接入指南

Nginx UI 集成 Casdoor:OAuth 2.0 统一身份认证接入指南 【免费下载链接】nginx-ui Yet another WebUI for Nginx 项目地址: https://gitcode.com/gh_mirrors/ngi/nginx-ui 本篇技术指南围绕 Nginx UI 的 Casdoor 认证提供方配置展开,完整讲解 En… · 2026/9/23 14:30:47

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码